-
觀察者模式:對象間的一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象(被觀察)。
以便一個對象的狀態發生變化時,所有依賴于它的對象都得到通知并發生相應的變化。
觀察者模式有很多實現方式:該模式必須包含觀察者和被觀察對象兩種角色。觀察者和被觀察者之間存在“觀察”的邏輯關系,當被觀察者發生改變的時候,觀察者就會觀察到這樣的變化,發出相應的改變。
2 | * 觀察者接口:觀察者,需要用到觀察者模式的類需實現此接口 |
4 | public interface Observer |
6 | public void update(Object obj); |
2 | * 被觀察者(一般是抽象類,方便擴展):申明方法,發生了某種變化,將變化通知觀察者。 |
4 | public interface BeenObserved |
6 | public void addObserver(Observer obs); |
7 | public void removeObserver(Observer obs); |
8 | public void notifyObservers(String changed); |
02 | * 目標被觀察者:實現被觀察者的接口,對觀察者對象進行對應操作 |
04 | public class ConcreteWatched implements BeenObserved { |
06 | private List<Observer> list = new ArrayList<Observer>(); |
08 | public void addObserver(Observer obs) |
10 | if (!list.contains(obs)) { |
15 | public void removeObserver(Observer obs) |
17 | if (list.contains(obs)) { |
23 | public void notifyObservers(String change) { |
25 | for (Observer obs : list) { |
04 | public class SpecificWatcher implements Observer |
07 | public void update(Object obj) |
09 | System.out.println(obj.toString()); |
17 | public static void main(String[] args) |
19 | BeenObserved bObs = new ConcreteWatched(); |
20 | Observer obs1 = new SpecificWatcher(); |
21 | Observer obs2 = new SpecificWatcher(); |
22 | Observer obs3 = new SpecificWatcher(); |
24 | bObs.addObserver(obs1); |
25 | bObs.addObserver(obs2); |
26 | bObs.addObserver(obs3); |
27 | bObs.notifyObservers( "***收到了通知***" ); |
29 | System.out.println( "----------分隔線--------------" ); |
31 | bObs.removeObserver(obs2); |
32 | bObs.notifyObservers( "***少了一個觀察者***" ); |
最后打印結果:

以上就是本文的全部內容,希望對大家的學習java程序設計有所幫助。