Advertisement
rafibatam

Design Pattern Observer JAVA

Feb 28th, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.22 KB | None | 0 0
  1. 1. Observer Pattern adalah salah satu Software Design Pattern yang berguna untuk memantain state (keadaan) dari sesuatu dan mengabarkan state tersebut kepada bagian-bagian yang membutuhkan.
  2. 2. Kelebihan Observer Pattern = Dapat membuat sebuah method yang dipantau dan memantau oleh method lain
  3. 3. Kekurangan Observer Pattern = Subject (publisher) mungkin mengirim update yang tidak penting bagi Observer (subsriber)
  4. 4. Kapan digunakan Observer Pattern = Ketika anda membutuhkan object lain untuk menerima update saat object lain berubah
  5. 5. Apa yang dilakukan ketika tidak boleh menggunakan Observer Pattern =
  6.  
  7. Tambahan :
  8. 1. Register Observer: Observable dapat mendaftarkan observer yang akan melakukan subscribe
  9. 2. Notify Observer: Beri tahu observer ketika ada perubahan state
  10. 3. Remove Observer:  Unsubscibe dari observable (objek yang disubcribe)
  11. 4. Update Observer : Sesuatu yang dilakukan ketika mendapat notifikasi dari Observer
  12.  
  13. // Subject.java
  14. public interface Subject {
  15.     public void register(Observer o);
  16.     public void removeRegister(Observer o);
  17.     public void notifyObserver();
  18. }
  19.  
  20. // Observer.java
  21. public interface Observer {
  22.     public void update(double sahamPadang, double sahamSunda, double sahamTegal);
  23. }
  24.  
  25. // StockGrabber.java
  26. import java.util.ArrayList;
  27.  
  28. public class StockGrabber implements Subject {
  29.     private ArrayList<Observer> observers;
  30.     private double sahamPadang;
  31.     private double sahamSunda;
  32.     private double sahamTegal;
  33.    
  34.     public StockGrabber() {
  35.         observers = new ArrayList<Observer>();
  36.     }
  37.  
  38.     public void register(Observer newObserver) {
  39.         observers.add(newObserver);
  40.     }
  41.  
  42.     public void removeRegister(Observer removeObserver) {
  43.         int observerIndex = observers.indexOf(removeObserver);
  44.         System.out.println("Observer " + (observerIndex + 1) + " removed.");
  45.         observers.remove(observerIndex);
  46.     }
  47.  
  48.     public void notifyObserver() {
  49.         for(Observer observer : observers) {
  50.             observer.update(sahamPadang, sahamSunda, sahamTegal);
  51.         }
  52.     }
  53.    
  54.     public void setSahamPadang(double newSahamPadang) {
  55.         this.sahamPadang = newSahamPadang;
  56.         notifyObserver();
  57.     }
  58.    
  59.     public void setSahamSunda(double newSahamSunda) {
  60.         this.sahamSunda = newSahamSunda;
  61.         notifyObserver();
  62.     }
  63.    
  64.     public void setSahamTegal(double newSahamTegal) {
  65.         this.sahamTegal = newSahamTegal;
  66.         notifyObserver();
  67.     }
  68. }
  69.  
  70. // StockObserver.java
  71. public class StockObserver implements Observer {
  72.     private double sahamPadang;
  73.     private double sahamSunda;
  74.     private double sahamTegal;
  75.    
  76.     private static int observerIDTracker = 0;
  77.    
  78.     private int observerID;
  79.    
  80.     private Subject stockGrabber;
  81.    
  82.     public StockObserver(Subject stockGrabber) {
  83.         this.stockGrabber = stockGrabber;
  84.         this.observerID = ++ observerIDTracker;
  85.        
  86.         System.out.println("New Observer " + observerID);
  87.        
  88.         stockGrabber.register(this);
  89.     }
  90.  
  91.     public void update(double sahamPadang, double sahamSunda, double sahamTegal) {
  92.         this.sahamPadang = sahamPadang;
  93.         this.sahamSunda = sahamSunda;
  94.         this.sahamTegal = sahamTegal;
  95.        
  96.         System.out.println("1. Saham Restaurant Makanan Padang  : " + sahamPadang
  97.                 + "\n2. Saham Restaurant Makanan Sunda  : " + sahamSunda
  98.                 + "\n3. Saham Restaurant Makanan Tegal  : " + sahamTegal
  99.                 + "\n");
  100.     }
  101. }
  102.  
  103. // GrabStocks.java
  104. public class GrabStocks {
  105.     public static void main(String[] args) {
  106.         StockGrabber stockGrabber = new StockGrabber();
  107.         StockObserver observer1 = new StockObserver(stockGrabber);
  108.        
  109.         stockGrabber.setSahamPadang(90000.30);
  110.         stockGrabber.setSahamSunda(89000.90);
  111.         stockGrabber.setSahamTegal(95000.10);
  112.        
  113.         StockObserver observer2 = new StockObserver(stockGrabber);
  114.        
  115.         stockGrabber.setSahamPadang(91000.50);
  116.         stockGrabber.setSahamSunda(90000.30);
  117.         stockGrabber.setSahamTegal(96000.80);
  118.        
  119.         Runnable getSahamPadang = new GetTheStocks(stockGrabber, 2, "Restaurant Padang", 91000.50);
  120.         Runnable getSahamSunda = new GetTheStocks(stockGrabber, 2, "Restaurant Sunda", 90000.30);
  121.         Runnable getSahamTegal = new GetTheStocks(stockGrabber, 2, "Restaurant Tegal", 96000.80);
  122.        
  123.         new Thread(getSahamPadang).start();
  124.         new Thread(getSahamSunda).start();
  125.         new Thread(getSahamTegal).start();
  126.     }
  127. }
  128.  
  129. // GetTheStocks.java
  130. import java.text.*;
  131.  
  132. public class GetTheStocks implements Runnable {
  133.     private int startTime;
  134.     private String stock;
  135.     private double saham;
  136.    
  137.     private Subject stockGrabber;
  138.    
  139.     public GetTheStocks(Subject stockGrabber, int newStartTime, String newStock, double newSaham) {
  140.         this.stockGrabber = stockGrabber;
  141.         startTime = newStartTime;
  142.         stock = newStock;
  143.         saham = newSaham;
  144.     }
  145.  
  146.     public void run() {
  147.         for(int i = 1; i <= 30; i++) {
  148.             try {
  149.                 Thread.sleep(2000);
  150.             }
  151.            
  152.             catch(InterruptedException e) {}
  153.            
  154.             double randNum = (Math.random()) + 10.50;
  155.            
  156.             DecimalFormat df = new DecimalFormat("##.##");
  157.            
  158.             saham = Double.valueOf(df.format((saham + randNum)));
  159.            
  160.             if(stock == "1. Restaurant Padang") ((StockGrabber)stockGrabber).setSahamPadang(saham);
  161.             if(stock == "2. Restaurant Sunda") ((StockGrabber)stockGrabber).setSahamSunda(saham);
  162.             if(stock == "3. Restaurant Tegal") ((StockGrabber)stockGrabber).setSahamTegal(saham);
  163.            
  164.             System.out.println(stock + " : " + df.format((saham + randNum)) + " " + df.format(randNum));
  165.             System.out.println();
  166.         }
  167.     }
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement