Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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. Kelebihan Observer Pattern = Dapat membuat sebuah method yang dipantau dan memantau oleh method lain
- 3. Kekurangan Observer Pattern = Subject (publisher) mungkin mengirim update yang tidak penting bagi Observer (subsriber)
- 4. Kapan digunakan Observer Pattern = Ketika anda membutuhkan object lain untuk menerima update saat object lain berubah
- 5. Apa yang dilakukan ketika tidak boleh menggunakan Observer Pattern =
- Tambahan :
- 1. Register Observer: Observable dapat mendaftarkan observer yang akan melakukan subscribe
- 2. Notify Observer: Beri tahu observer ketika ada perubahan state
- 3. Remove Observer: Unsubscibe dari observable (objek yang disubcribe)
- 4. Update Observer : Sesuatu yang dilakukan ketika mendapat notifikasi dari Observer
- // Subject.java
- public interface Subject {
- public void register(Observer o);
- public void removeRegister(Observer o);
- public void notifyObserver();
- }
- // Observer.java
- public interface Observer {
- public void update(double sahamPadang, double sahamSunda, double sahamTegal);
- }
- // StockGrabber.java
- import java.util.ArrayList;
- public class StockGrabber implements Subject {
- private ArrayList<Observer> observers;
- private double sahamPadang;
- private double sahamSunda;
- private double sahamTegal;
- public StockGrabber() {
- observers = new ArrayList<Observer>();
- }
- public void register(Observer newObserver) {
- observers.add(newObserver);
- }
- public void removeRegister(Observer removeObserver) {
- int observerIndex = observers.indexOf(removeObserver);
- System.out.println("Observer " + (observerIndex + 1) + " removed.");
- observers.remove(observerIndex);
- }
- public void notifyObserver() {
- for(Observer observer : observers) {
- observer.update(sahamPadang, sahamSunda, sahamTegal);
- }
- }
- public void setSahamPadang(double newSahamPadang) {
- this.sahamPadang = newSahamPadang;
- notifyObserver();
- }
- public void setSahamSunda(double newSahamSunda) {
- this.sahamSunda = newSahamSunda;
- notifyObserver();
- }
- public void setSahamTegal(double newSahamTegal) {
- this.sahamTegal = newSahamTegal;
- notifyObserver();
- }
- }
- // StockObserver.java
- public class StockObserver implements Observer {
- private double sahamPadang;
- private double sahamSunda;
- private double sahamTegal;
- 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 " + observerID);
- stockGrabber.register(this);
- }
- public void update(double sahamPadang, double sahamSunda, double sahamTegal) {
- this.sahamPadang = sahamPadang;
- this.sahamSunda = sahamSunda;
- this.sahamTegal = sahamTegal;
- System.out.println("1. Saham Restaurant Makanan Padang : " + sahamPadang
- + "\n2. Saham Restaurant Makanan Sunda : " + sahamSunda
- + "\n3. Saham Restaurant Makanan Tegal : " + sahamTegal
- + "\n");
- }
- }
- // GrabStocks.java
- public class GrabStocks {
- public static void main(String[] args) {
- StockGrabber stockGrabber = new StockGrabber();
- StockObserver observer1 = new StockObserver(stockGrabber);
- stockGrabber.setSahamPadang(90000.30);
- stockGrabber.setSahamSunda(89000.90);
- stockGrabber.setSahamTegal(95000.10);
- StockObserver observer2 = new StockObserver(stockGrabber);
- stockGrabber.setSahamPadang(91000.50);
- stockGrabber.setSahamSunda(90000.30);
- stockGrabber.setSahamTegal(96000.80);
- Runnable getSahamPadang = new GetTheStocks(stockGrabber, 2, "Restaurant Padang", 91000.50);
- Runnable getSahamSunda = new GetTheStocks(stockGrabber, 2, "Restaurant Sunda", 90000.30);
- Runnable getSahamTegal = new GetTheStocks(stockGrabber, 2, "Restaurant Tegal", 96000.80);
- new Thread(getSahamPadang).start();
- new Thread(getSahamSunda).start();
- new Thread(getSahamTegal).start();
- }
- }
- // GetTheStocks.java
- import java.text.*;
- public class GetTheStocks implements Runnable {
- private int startTime;
- private String stock;
- private double saham;
- private Subject stockGrabber;
- public GetTheStocks(Subject stockGrabber, int newStartTime, String newStock, double newSaham) {
- this.stockGrabber = stockGrabber;
- startTime = newStartTime;
- stock = newStock;
- saham = newSaham;
- }
- public void run() {
- for(int i = 1; i <= 30; i++) {
- try {
- Thread.sleep(2000);
- }
- catch(InterruptedException e) {}
- double randNum = (Math.random()) + 10.50;
- DecimalFormat df = new DecimalFormat("##.##");
- saham = Double.valueOf(df.format((saham + randNum)));
- if(stock == "1. Restaurant Padang") ((StockGrabber)stockGrabber).setSahamPadang(saham);
- if(stock == "2. Restaurant Sunda") ((StockGrabber)stockGrabber).setSahamSunda(saham);
- if(stock == "3. Restaurant Tegal") ((StockGrabber)stockGrabber).setSahamTegal(saham);
- System.out.println(stock + " : " + df.format((saham + randNum)) + " " + df.format(randNum));
- System.out.println();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement