定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。
觀察者模式有四個角色:抽象主題、具體主題、抽象觀察者、具體觀察者。
抽象主題:把所有觀察者物件的引用儲存到乙個聚集裡,每個主題都可以有任何數量的觀察者。
具體主題:將有關狀態存入具體觀察者物件;在具體主題內部狀態改變時,給所有登記過的觀察者發出通知。
抽象觀察者:為所有的具體觀察者定義乙個介面,在得到主題通知時更新自己。
具體觀察者:實現抽象觀察者角色所要求的更新介面,以便使本身的狀態與主題狀態協調。
namespace dp_observer
public abstract class subject
}public class concretesubject : subject
}public class concreteobserver : observer
public override void update()
}}
客戶端呼叫:
var subject = new concretesubject();
subject.add(new concreteobserver(subject, "1"));
subject.add(new concreteobserver(subject, "2"));
subject.state = "changed";
subject.notify();
C 實現觀察者模式
定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。完美的將觀察者和被觀察的物件分離開。有時又被稱為 模型 檢視 view 模式 源 收聽者 listener 模式 或為發布 訂閱模式 目標就是通知的發布者,觀察者是通知的訂閱者 接受通知 obse...
C 實現觀察者模式
舉乙個例子 報社發行報紙 你訂閱報紙,一旦有新一期的報紙發行,新報紙就會送到你家裡,只要你一直訂閱,你就一直會收到新報紙 你不再訂閱報紙的時候,就收不到以後的新報紙了 報社運營的時候,一直會有人去訂閱或者取消訂閱報紙.發布者 訂閱者 觀察者模式 publishers subscribers obse...
觀察者模式 C 實現
cpp include include include include 氣象監控應用問題 head first 設計模式案例 using namespace std class observer 觀察者公共介面 class subject 主題公共介面 問題 成員函式為什麼不能用純虛函式?virtu...