標籤:ace hive more www. 列表 chm wiki 實現 err
一、
觀察者模式(Observer)
觀察者模式很好理解,類似於郵件訂閱和RSS訂閱,當我們瀏覽一些部落格或wiki時,經常會看到RSS表徵圖,就這的意思是,當你訂閱了該文章,如果後續有更新,會及時通知你。其實,簡單來講就一句話:當一個對象變化時,其它依賴該對象的對象都會收到通知,並且隨著變化!對象之間是一種一對多的關係。先來看看關係圖:
我解釋下這些類的作用:MySubject類就是我們的主對象,Observer1和Observer2是依賴於MySubject的對象,當MySubject變化時,Observer1和Observer2必然變化。AbstractSubject類中定義著需要監控的對象列表,可以對其進行修改:增加或刪除被監控對象,且當MySubject變化時,負責通知在列表記憶體在的對象。我們看實現代碼:
一個Observer介面:
- public interface Observer {
- public void update();
- }
兩個實作類別:
- public class Observer1 implements Observer {
-
- @Override
- public void update() {
- System.out.println("observer1 has received!");
- }
- }
- public class Observer2 implements Observer {
-
- @Override
- public void update() {
- System.out.println("observer2 has received!");
- }
-
- }
Subject介面及實作類別:
- public interface Subject {
-
- /*增加觀察者*/
- public void add(Observer observer);
-
- /*刪除觀察者*/
- public void del(Observer observer);
-
- /*通知所有的觀察者*/
- public void notifyObservers();
-
- /*自身的操作*/
- public void operation();
- }
- public abstract class AbstractSubject implements Subject {
-
- private Vector<Observer> vector = new Vector<Observer>();
- @Override
- public void add(Observer observer) {
- vector.add(observer);
- }
-
- @Override
- public void del(Observer observer) {
- vector.remove(observer);
- }
-
- @Override
- public void notifyObservers() {
- Enumeration<Observer> enumo = vector.elements();
- while(enumo.hasMoreElements()){
- enumo.nextElement().update();
- }
- }
- }
- public class MySubject extends AbstractSubject {
-
- @Override
- public void operation() {
- System.out.println("update self!");
- notifyObservers();
- }
-
- }
測試類別:
- public class ObserverTest {
-
- public static void main(String[] args) {
- Subject sub = new MySubject();
- sub.add(new Observer1());
- sub.add(new Observer2());
-
- sub.operation();
- }
-
- }
輸出:
update self!
observer1 has received!
observer2 has received!
轉載 https://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html
Java二十三設計模式之------觀察者模式