觀察者模式(Observer)

來源:互聯網
上載者:User

標籤:

觀察者模式定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態上發生變化時,會通知所有觀察者對象,讓他們能夠自動更新自己。觀察者模式組成:

抽象主題角色:把所有對觀察者對象的引用儲存在一個集合中,每個抽象主題角色都可以有任意數量的觀察者。抽象主題提供一個介面,可以增加和刪除觀察者角色。一般用一個抽象類別或介面來實現。

抽象觀察者角色:為所有具體的觀察者定義一個介面,在得到主題的通知時更新自己。

具體主題角色:在具體主題內部狀態改變時,給所有登記過的觀察者發出通知。具體主題角色通常用一個子類實現。

具體觀察者角色:該角色實現抽象觀察者角色所要求的更新介面,以便使本身的狀態與主題的狀態相協調。如果需要,具體觀察者角色可以儲存一個指向具體主題角色的引用。通常用一個子類實現。

 1 package observer; 2  3 public class ConcreteWatcher implements Watcher 4 { 5     @Override 6     public void update(String str) 7     { 8         System.out.println(str); 9     }10 11 }12 13 package observer;14 15 import java.util.ArrayList;16 import java.util.List;17 18 public class ConcreteWatched implements Watched19 {20     private List<Watcher> list = new ArrayList<Watcher>();21     22     @Override23     public void addWatcher(Watcher watcher)24     {25         list.add(watcher);26     }27 28     @Override29     public void removeWatcher(Watcher watcher)30     {31         list.remove(watcher);32     }33 34     @Override35     public void notifyWatchers(String str)36     {37         for(Watcher watcher : list)38         {39             watcher.update(str);40         }41     }42 43 }44 45 package observer;46 47 public interface Watcher48 {49     public void update(String str);50 }51 52 package observer;53 54 public interface Watched55 {56     public void addWatcher(Watcher watcher);57     58     public void removeWatcher(Watcher watcher);59     60     public void notifyWatchers(String str);61 }62 63 package observer;64 65 public class Test66 {67     public static void main(String[] args)68     {69         Watched girl = new ConcreteWatched();70         71         Watcher watcher1 = new ConcreteWatcher();72         Watcher watcher2 = new ConcreteWatcher();73         Watcher watcher3 = new ConcreteWatcher();74         75         girl.addWatcher(watcher1);76         girl.addWatcher(watcher2);77         girl.addWatcher(watcher3);78         79         girl.notifyWatchers("123");80         81         girl.removeWatcher(watcher2);82         83         girl.notifyWatchers("456");84         85     86     }87 }

 

觀察者模式(Observer)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.