一、需要的類
一個發布類:里面一個是別人需要訂閱的屬性,以及用于存儲訂閱者的list,attach方法是往list集合里面添加元素,notifyObservers通知方法,也就是循環調用訂閱者里面的一個方法,這個notifyObservers在set屬性的時候調用
一個訂閱者抽象類:發布者notifyObservers里面調用的那個方法,外加一個訂閱者用于獲取里面的內容
N個訂閱者:在構造器中將自己注冊到發布者集合中,外加一個接口實現內容
二、實現代碼
發布類
public class Subject {private String state;private List<Observer> observers = new ArrayList<Observer>();public void attach(Observer observer){observers.add(observer);}public void notifyObservers(){for (Observer observer : observers){observer.update();}}public void setState(String state){this.state = state;notifyObservers();}public String getState(){return state;}
}
訂閱抽象類
public abstract class Observer {public Subject subject;public abstract void update();
}
訂閱實現類1
public class BinaryObserver extends Observer{public BinaryObserver(Subject subject){this.subject = subject;this.subject.attach(this);}@Overridepublic void update() {System.out.println("Binary String: " + this.subject.getState());}
}
訂閱實現類2
public class OctalObserver extends Observer{public OctalObserver(Subject subject) {this.subject = subject;this.subject.attach(this);}@Overridepublic void update() {System.out.println("Octal String: " + subject.getState());}
}
調用類
@SpringBootApplication
public class ObserverApplication {public static void main(String[] args) {Subject subject = new Subject();new BinaryObserver(subject);new OctalObserver(subject);subject.setState("10");subject.setState("20");}
}