開發 observer 模式時借助委託,可以進一步簡化開發的過程。由於委託物件支援多路廣播,在observer 類中建立了乙個委託物件wagehandler,通過attach與detach方法可以分別加入或取消委託。如果觀察者想對事物進行監測,只需要加入乙個委託物件即可。然後委託的getinvodationlist方法能獲取多路廣播委託列表,在execute方法中,就是通過去多路廣播委託列表去判斷所繫結的委託數量是否為0。
public執行結果:delegate
double handler(double
wages);
public
class
manager
}public
class
employee
}public
class
observe
//通過getinvodationlist方法獲取多路廣播委託列表,如果觀察者數量大於0即執行方法
public
void execute(double
basicwages)
}class
program
}
然後為了加大難度,又用c++編寫了乙個類似例子來實現觀察者模式,當然c++編寫起來相對c#會複雜一些,而且最終實現效果沒有c#好,但是一切都是為了更好的學習和理解語言,這波還是不虧的,c++裡面有個和委託類似的東西,它的名字叫函式指標,然後用set存放函式指標,遍歷執行
#include "stdafx.h
"using
namespace
std;
typedef
double(*handler)(double wages);//
定義函式指標,功能和c#中的委託類似
class
manager
};class
employee
};class
observe
//刪除觀察者
哈哈,大功告成,擼這種在老闆面前一文不值,自己卻擼的很嗨的**,還真是很開心的呢^^,也許這就是程式猿才能明白的快樂吧
C 實現觀察者模式
定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。完美的將觀察者和被觀察的物件分離開。有時又被稱為 模型 檢視 view 模式 源 收聽者 listener 模式 或為發布 訂閱模式 目標就是通知的發布者,觀察者是通知的訂閱者 接受通知 obse...
C 實現觀察者模式
舉乙個例子 報社發行報紙 你訂閱報紙,一旦有新一期的報紙發行,新報紙就會送到你家裡,只要你一直訂閱,你就一直會收到新報紙 你不再訂閱報紙的時候,就收不到以後的新報紙了 報社運營的時候,一直會有人去訂閱或者取消訂閱報紙.發布者 訂閱者 觀察者模式 publishers subscribers obse...
觀察者模式 C 實現
定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。觀察者模式有四個角色 抽象主題 具體主題 抽象觀察者 具體觀察者。抽象主題 把所有觀察者物件的引用儲存到乙個聚集裡,每個主題都可以有任何數量的觀察者。具體主題 將有關狀態存入具體觀察者物件 在具體...