Rahmadnet

Observer

Mar 4th, 2019
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.50 KB | None | 0 0
  1. 1. what is Observer patten
  2.     Observer adalah design pattern yang dimana suatu objek mempunyai daftar objek yang memiliki ketergantungan / dependencies. desing pattern observer dapat digunakan  setiap kali subjek harus diamati oleh satu atau lebih observer.
  3. 2. what are their benefit
  4.     Kita bisa melihat stock barang dan menupdate barang yang telah habis sehingga kita tidak bingung ketika ada perubahan pada stock tersebut.
  5. 3. what are their drawback
  6.     Kelemahan nya adalah observer ini hanya cocok untuk system stock seperti toko online.
  7. 4. when to use it at best
  8.     > Ketika kita membutuhkan banyak objek lain untuk menerima pembaruan ketika objek lain berubah.
  9.     > Ketika sebuah bisnis yang memiliki pasar saham dengan ribuan stock perlu mengirim pembaruan ke objek yang mewakili saham individual.
  10.     > subjek(penerbit) bisa mengirim banyak stok kepada pelanggan.
  11. 5. when to NOT use it
  12.     ketika kita tidak memerlukan penambahan objek yang akan dirubah dan apabila kita tidak memerlukan pelanggan karena pattern inin hanya cocok untuk perusahaan yang seperti swalayan atau mall.
  13.  
  14.  
  15.  
  16. package com.rahmadnet;
  17.  
  18. public class GrabStocks
  19. {
  20.     public static void main(String[] args)
  21.     {
  22.         StockGrabber stockGrabber = new StockGrabber();
  23.        
  24.         StockObserver observer1 = new StockObserver(stockGrabber);
  25.        
  26.         stockGrabber.setIBMPrice(197.00);
  27.         stockGrabber.setAAPLPrice(677.60);
  28.         stockGrabber.setGOOGPrirece(676.40);
  29.        
  30.         StockObserver observer2 = new StockObserver(stockGrabber);
  31.        
  32.         stockGrabber.setIBMPrice(20.00);
  33.         stockGrabber.setAAPLPrice(20.00);
  34.         stockGrabber.setGOOGPrirece(20.00);
  35.        
  36.         stockGrabber.unregister(observer1);
  37.        
  38.         stockGrabber.setIBMPrice(197.00);
  39.         stockGrabber.setAAPLPrice(677.60);
  40.         stockGrabber.setGOOGPrirece(676.40);
  41.        
  42.        
  43.         Runnable getIBM = new GetTheStock(stockGrabber, 2, "IBM", 2019.00);
  44.         Runnable getAAPL = new GetTheStock(stockGrabber, 2, "AAPL", 2019.00);
  45.         Runnable getGOOG = new GetTheStock(stockGrabber, 2, "GOOG", 2019.00);
  46.        
  47.         new Thread(getIBM).start();
  48.         new Thread(getAAPL).start();
  49.         new Thread(getGOOG).start();
  50.     }
  51. }
  52.  
  53. package com.rahmadnet;
  54.  
  55. public interface Subject
  56. {
  57.     public void regieter(Observer o);
  58.     public void unregister(Observer o);
  59.     public void notifyObserver();
  60. }
  61.  
  62.  
  63. package com.rahmadnet;
  64.  
  65. import java.util.ArrayList;
  66.  
  67. public class StockGrabber implements Subject
  68. {
  69.  
  70.     private ArrayList<Observer> observer;
  71.     private double ibmPrice;
  72.     private double aaplPrice;
  73.     private double googPrice;
  74.    
  75.     public StockGrabber()
  76.     {
  77.         observer = new ArrayList<Observer>();
  78.     }
  79.    
  80.     @Override
  81.     public void regieter(Observer newObserver)
  82.     {
  83.         observer.add(newObserver);     
  84.     }
  85.  
  86.     @Override
  87.     public void unregister(Observer deleteObserver)  
  88.     {
  89.         int observerIndex = observer.indexOf(deleteObserver);
  90.        
  91.         System.out.println("Observer " + (observerIndex + 1) + " delete");
  92.        
  93.         observer.remove(observerIndex);
  94.     }
  95.  
  96.     @Override
  97.     public void notifyObserver()
  98.     {
  99.         for(Observer observer : observer)
  100.         {
  101.             observer.update(ibmPrice, aaplPrice, googPrice);
  102.         }
  103.     }
  104.    
  105.     public void setIBMPrice(double newIBMPrice)
  106.     {
  107.         this.ibmPrice = newIBMPrice;
  108.         notifyObserver();
  109.     }
  110.    
  111.     public void setAAPLPrice(double newAAPLPrice)
  112.     {
  113.         this.aaplPrice = newAAPLPrice;
  114.         notifyObserver();
  115.     }
  116.    
  117.     public void setGOOGPrirece(double newGOOGPrice)
  118.     {
  119.         this.googPrice = newGOOGPrice;
  120.         notifyObserver();
  121.     }
  122.  
  123. }
  124.  
  125. package com.rahmadnet;
  126.  
  127. public interface Observer
  128. {
  129.     public void update(double ibmPrice, double aaplPrice, double googPrice);
  130. }
  131.  
  132.  
  133. package com.rahmadnet;
  134.  
  135. public class StockObserver implements Observer
  136. {
  137.  
  138.     private double ibmPrice;
  139.     private double aaplPrice;
  140.     private double googPrice;
  141.    
  142.     private static int observerIDTracker = 0;
  143.    
  144.     private int observerID;
  145.    
  146.     private Subject StockGrabber;
  147.    
  148.     public StockObserver(Subject stockGrabber)
  149.     {
  150.         this.StockGrabber = stockGrabber;
  151.        
  152.         this.observerID = ++observerIDTracker;
  153.        
  154.         System.out.println("New Observer " + this.observerID);
  155.        
  156.         stockGrabber.regieter(this);
  157.     }
  158.    
  159.    
  160.     @Override
  161.     public void update(double ibmPrice, double aaplPrice, double googPrice) {
  162.        
  163.         this.ibmPrice = ibmPrice;
  164.         this.aaplPrice = aaplPrice;
  165.         this.googPrice = googPrice;
  166.        
  167.         printThePrices();
  168.        
  169.     }
  170.    
  171.     public void printThePrices()
  172.     {
  173.         System.out.println(observerID + "\nIBM : " + ibmPrice +
  174.                         "\nAAPL : " + aaplPrice + "\nGOOG : "+ googPrice + "\n");
  175.     }
  176.    
  177. }
  178.  
  179. package com.rahmadnet;
  180.  
  181. import java.text.DecimalFormat;
  182.  
  183. public class GetTheStock implements Runnable
  184. {
  185.     private int startTime;
  186.     private String stock;
  187.     private double price;
  188.    
  189.     private Subject stockGrabber;
  190.    
  191.     public GetTheStock(Subject stockGrabber, int newStartTime, String newStock,
  192.     double newPrice)
  193.     {
  194.         this.stockGrabber = stockGrabber;
  195.        
  196.         startTime = newStartTime;
  197.        
  198.         stock = newStock;
  199.         price = newPrice;
  200.     }
  201.  
  202.     @Override
  203.     public void run() {
  204.        
  205.         for(int i = 1; i <= 20; i++)
  206.         {
  207.             try
  208.             {
  209.                 Thread.sleep(1000);
  210.             }
  211.             catch (InterruptedException e) {}
  212.            
  213.             double randNum = (Math.random() * (.06) - .03);
  214.            
  215.             DecimalFormat df = new DecimalFormat("#.##");
  216.            
  217.             price = Double.valueOf(df.format((price + randNum)));
  218.            
  219.             if(stock == "IBM") ((StockGrabber)stockGrabber).setIBMPrice(price);
  220.            
  221.             if(stock == "AAPL") ((StockGrabber)stockGrabber).setAAPLPrice(price);
  222.            
  223.             if(stock == "GOOG") ((StockGrabber)stockGrabber).setGOOGPrirece(price);
  224.            
  225.             System.out.println(stock + ": " + df.format((price + randNum))
  226.                     + " " + df.format(randNum));
  227.            
  228.             System.out.println();
  229.         }
  230.     }
  231. }
Advertisement
Add Comment
Please, Sign In to add comment