Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1. what is Observer patten
- 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.
- 2. what are their benefit
- Kita bisa melihat stock barang dan menupdate barang yang telah habis sehingga kita tidak bingung ketika ada perubahan pada stock tersebut.
- 3. what are their drawback
- Kelemahan nya adalah observer ini hanya cocok untuk system stock seperti toko online.
- 4. when to use it at best
- > Ketika kita membutuhkan banyak objek lain untuk menerima pembaruan ketika objek lain berubah.
- > Ketika sebuah bisnis yang memiliki pasar saham dengan ribuan stock perlu mengirim pembaruan ke objek yang mewakili saham individual.
- > subjek(penerbit) bisa mengirim banyak stok kepada pelanggan.
- 5. when to NOT use it
- 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.
- package com.rahmadnet;
- public class GrabStocks
- {
- public static void main(String[] args)
- {
- StockGrabber stockGrabber = new StockGrabber();
- StockObserver observer1 = new StockObserver(stockGrabber);
- stockGrabber.setIBMPrice(197.00);
- stockGrabber.setAAPLPrice(677.60);
- stockGrabber.setGOOGPrirece(676.40);
- StockObserver observer2 = new StockObserver(stockGrabber);
- stockGrabber.setIBMPrice(20.00);
- stockGrabber.setAAPLPrice(20.00);
- stockGrabber.setGOOGPrirece(20.00);
- stockGrabber.unregister(observer1);
- stockGrabber.setIBMPrice(197.00);
- stockGrabber.setAAPLPrice(677.60);
- stockGrabber.setGOOGPrirece(676.40);
- Runnable getIBM = new GetTheStock(stockGrabber, 2, "IBM", 2019.00);
- Runnable getAAPL = new GetTheStock(stockGrabber, 2, "AAPL", 2019.00);
- Runnable getGOOG = new GetTheStock(stockGrabber, 2, "GOOG", 2019.00);
- new Thread(getIBM).start();
- new Thread(getAAPL).start();
- new Thread(getGOOG).start();
- }
- }
- package com.rahmadnet;
- public interface Subject
- {
- public void regieter(Observer o);
- public void unregister(Observer o);
- public void notifyObserver();
- }
- package com.rahmadnet;
- import java.util.ArrayList;
- public class StockGrabber implements Subject
- {
- private ArrayList<Observer> observer;
- private double ibmPrice;
- private double aaplPrice;
- private double googPrice;
- public StockGrabber()
- {
- observer = new ArrayList<Observer>();
- }
- @Override
- public void regieter(Observer newObserver)
- {
- observer.add(newObserver);
- }
- @Override
- public void unregister(Observer deleteObserver)
- {
- int observerIndex = observer.indexOf(deleteObserver);
- System.out.println("Observer " + (observerIndex + 1) + " delete");
- observer.remove(observerIndex);
- }
- @Override
- public void notifyObserver()
- {
- for(Observer observer : observer)
- {
- observer.update(ibmPrice, aaplPrice, googPrice);
- }
- }
- public void setIBMPrice(double newIBMPrice)
- {
- this.ibmPrice = newIBMPrice;
- notifyObserver();
- }
- public void setAAPLPrice(double newAAPLPrice)
- {
- this.aaplPrice = newAAPLPrice;
- notifyObserver();
- }
- public void setGOOGPrirece(double newGOOGPrice)
- {
- this.googPrice = newGOOGPrice;
- notifyObserver();
- }
- }
- package com.rahmadnet;
- public interface Observer
- {
- public void update(double ibmPrice, double aaplPrice, double googPrice);
- }
- package com.rahmadnet;
- public class StockObserver implements Observer
- {
- private double ibmPrice;
- private double aaplPrice;
- private double googPrice;
- private static int observerIDTracker = 0;
- private int observerID;
- private Subject StockGrabber;
- public StockObserver(Subject stockGrabber)
- {
- this.StockGrabber = stockGrabber;
- this.observerID = ++observerIDTracker;
- System.out.println("New Observer " + this.observerID);
- stockGrabber.regieter(this);
- }
- @Override
- public void update(double ibmPrice, double aaplPrice, double googPrice) {
- this.ibmPrice = ibmPrice;
- this.aaplPrice = aaplPrice;
- this.googPrice = googPrice;
- printThePrices();
- }
- public void printThePrices()
- {
- System.out.println(observerID + "\nIBM : " + ibmPrice +
- "\nAAPL : " + aaplPrice + "\nGOOG : "+ googPrice + "\n");
- }
- }
- package com.rahmadnet;
- import java.text.DecimalFormat;
- public class GetTheStock implements Runnable
- {
- private int startTime;
- private String stock;
- private double price;
- private Subject stockGrabber;
- public GetTheStock(Subject stockGrabber, int newStartTime, String newStock,
- double newPrice)
- {
- this.stockGrabber = stockGrabber;
- startTime = newStartTime;
- stock = newStock;
- price = newPrice;
- }
- @Override
- public void run() {
- for(int i = 1; i <= 20; i++)
- {
- try
- {
- Thread.sleep(1000);
- }
- catch (InterruptedException e) {}
- double randNum = (Math.random() * (.06) - .03);
- DecimalFormat df = new DecimalFormat("#.##");
- price = Double.valueOf(df.format((price + randNum)));
- if(stock == "IBM") ((StockGrabber)stockGrabber).setIBMPrice(price);
- if(stock == "AAPL") ((StockGrabber)stockGrabber).setAAPLPrice(price);
- if(stock == "GOOG") ((StockGrabber)stockGrabber).setGOOGPrirece(price);
- System.out.println(stock + ": " + df.format((price + randNum))
- + " " + df.format(randNum));
- System.out.println();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment