在軟體構建過程中,我們需要為某些物件建立一種「通知依賴關係」 ——乙個物件(目標物件)的狀態發生改變,所有的依賴物件(觀察者物件)都將得到通知。如果這樣的依賴關係過於緊密, 將使軟體不能很好地抵禦變化。
使用物件導向技術,可以將這種依賴關係弱化,並形成一種穩定的依賴關係。從而實現軟體體系結構的松耦合。
定義物件間的一種一對多(變化)的依賴關係,以便當乙個物件(subject)的狀態發生改變時,所有依賴於它的物件都得到通知並自動更新。
檔案分割器:
簡單實現:
class
mainform
:public form};
class
filesplitter
void
split()
}};
當我們需要新增乙個進度條
一種實現:
class
mainform
:public form};
class
filesplitter
void
split()
}};
另一種實現:
class
mainform
:public form,
public iprogress
virtual
void
doprogress
(float value)};
// 控制台進度
class
consolenotifier
:public iprogress};
// 抽象通知機制
class
iprogress};
class
filesplitter
void
split()
}void
addiprogress
(iprogress* iprogress)
void
removeiprogress
(iprogress* iprogress)
protected
:virtual
void
onprogress
(float value)}}
;
優點:觀察者和被觀察者是抽象耦合的。建立一套觸發機制。
缺點:如果乙個被觀察者物件有很多的直接和間接的觀察者的話,將所有的觀察者都通知到會花費很多時間。
如果在觀察者和觀察目標之間有迴圈依賴的話,觀察目標會觸發它們之間進行迴圈呼叫,可能導致系統崩潰。
觀察者模式沒有相應的機制讓觀察者知道所觀察的目標物件是怎麼發生變化的,而僅僅只是知道觀察目標發生了變化。
23種設計模式之觀察者模式(Observer)
觀察者模式又稱為發布 訂閱模式 模型 檢視模式 源 模式或從屬者 dependents 模式,是一種物件的行為型模式。它定義了物件之間的一種一對多的依賴關係,使得每當乙個物件狀態發生改變時,其相關依賴物件都得到通知並被自動更新。觀察者模式的優點在於實現了表示層和資料層的分離,並定義了穩定的更新訊息傳...
python 設計模式 觀察者 觀察者設計模式
在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...
23大設計模式之觀察者模式
常用的設計模式有23種,總體來說設計模式分為三大類 1,建立型模式,共五種 工廠方法模式 抽象工廠模式 單例模式 建造者模式 原型模式。2,結構型模式,共七種 介面卡模式 裝飾器模式 模式 外觀模式 橋接模式 組合模式 享元模式。3,行為型模式,共十一種 策略模式 模板方法模式 觀察者模式 迭代子模...