Python觀察者模式——瞭解對象的情況二

觀察者模式的通知方式

有兩種不同的方式可以通知觀察者在主題中發生的變化。它們可以被分爲推模型或拉模型。

拉模型

在拉模型中,觀察者扮演積極的角色。

1、每當發生變化時,主題都會向所有已經註冊的觀察者進行廣播。

2、出現變化時,觀察者負責獲取相應的變化情況,或者從訂戶哪裏拉取數據

3、拉模型的效率較低,因爲它涉及兩個步驟,第一步,主題通知觀察者;第二步,觀察者從主題那裏提取所需的數據

推模型

在推模型中,主題是起到主導作用的一方,如下所示。

1、與拉模型不同,變化由主題推送到觀察者的

2、在拉模型中,主題可以向觀察者發送詳情的信息(即使可能不需要)。當主題發送大量觀察者用不到的數據時,會使響應時間過長。

3、由於主題發送所需的數據,所以能夠提高性能

松耦合與觀察者模式

松耦合使軟件開發應該採用的重要設計原理之一。松耦合的主要目的使爭取在彼此交互的對象之間實現鬆散耦合設計。耦合是指一個對象對於其交互的其他對象的瞭解程度。

松耦合設計允許我們構建靈活的面向對象的系統,有效應對各種變化,因爲它們降低了多個對象之間的依賴。

松耦合架構具有以下特性:

1、它降低了在一個元素內發生的更改可能對其他元素產生意外影響的風險;

2、它使得測試/維護和故障排除工作更加簡單;

3、系統可以輕鬆地分解爲可定義的元素

觀察者模式提供了一種實現主題和觀察者松耦合的對象設計模式。以下幾條可以更好地解釋這一點。

1、主題對觀察者唯一的瞭解就是它實現一個特定的接口。同時,它也不需要了解具體觀察者類。

2、可以隨時添加任意的新觀察者

3、添加新的觀察者時,根本不需要修改主題

4、觀察者或主題沒有綁定在一起,所以可以彼此獨立使用

5、主題或觀察者中的變化不會相互影響。由於兩者都是獨立的或鬆散耦合的,所以它們可以自由地做出自己的改變

觀察者模式的優點和缺點

優點:

1、它使彼此交互的對象之間保持松耦合;

2、它使得我們可以在無需對主題或觀察者進行任何修改得情況下高效地發送數據到其他對象

3、可以隨時添加/刪除觀察者

缺點:

1、觀察者接口必須由具體觀察者實現,而這涉及繼承。無法進行組合,因爲觀察者接口可以實例化

2、如果實現不當得話,觀察者可能會增加複雜性,並導致性能降低

3、在軟件應用程序中,通知有時可能不可靠的,並導致競爭條件或不一致性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章