Observer 模式應該可以說是應用最多、影響最廣的設計模式之一,在系統(tǒng)開發(fā)架構(gòu)設計中有著很重要的地位和意義。
Observer模式的意圖是在對象之間定義一種一對多的依賴關系,當一個對象的狀態(tài)改變時,所有依賴者都將得到通知并自動更新。
舉例來說,有一份數(shù)據(jù),用不同的圖形表示形式,條形圖,扇形圖等,當數(shù)據(jù)改變的時候,所有的圖像都要發(fā)生改變。用結(jié)構(gòu)圖表示

Observer Pattern 結(jié)構(gòu)圖
suject對它的觀察者進行Attach(注冊)和Detach(注銷)。Observer將監(jiān)視某個事件的責任委托給Subject,由Suject通過notify來告知Observer事件發(fā)生。
class suject
{
public:
void attach(Observer* obs);
void detach(Observer* obs);
void notify()
{
for(int i=0;i<views.size();++i)
views[i]->update(value);
}
private:
int _value;
vector<Observer*> views;
};
這是Suject類的骨架,Suject保存數(shù)據(jù)和負責通知Observer,用到了Observer的update(使用虛函數(shù)繼承),是delegation 和 inheritance的組合。在面向?qū)ο笤O計中,出于不同的產(chǎn)品設計邏輯會選擇,使用不同的設計模式,一共有23個經(jīng)典的設計模式,實際上是三大關系composite,delegation和inheritance的組合變形,在設計模式的學習過程中還有很多需要認真研習的。