「元件協作」模式:
現代軟體專業分工之後的第乙個結果是「框架與應用程式的劃分」,「元件協作」模式通過晚期繫結,來實現框架與應用程式之間的松耦合,是二者之間協作時常用的模式。
典型模式
•template method
•strategy
•observer/ event
定義物件間的一種一對多(變化)的依賴關係,以便當乙個物件(subject)的狀態發生改變時,所有依賴於它的物件都得到通知並自動更新。
——《設計模式》gof
show me the code:
// 偽** 實現
// 例子:檔案分割器
// 把乙個大檔案分割成小檔案,現在需要加上乙個可以顯示進度條的功能
class filesplitter
void split()
}};//*****=== ui頁面**********=
class mainform : public form
};
考慮如果需求變更
進度使用label 展示,或者這是乙個控制台的程式,在控制台打點顯示進度,上面的**就有問題了
首先,這種設計違背了依賴倒置設計原則
•高層模組(穩定)不應該依賴於低層模組(變化),二者都應該依賴於抽象(穩定) 。
•抽象(穩定)不應該依賴於實現細節(變化) ,實現細節應該依賴於抽象(穩定)。
progressbar 是乙個細節實現,是乙個控制項,要想實現進度的展示,progressbar這裡抽象成乙個進度的通知,
調整**,抽象出乙個通知,緊耦合變為松耦合。多個進度顯示場景(控制台打點,進度條顯示,文字顯示)可以使用通知機制,乙個物件的狀態發生改變,該物件依賴的所有物件都能獲取到這個改變,即通知所有依賴的物件告知變化,可以把依賴的物件作為觀察者維護起來,放在乙個列表裡面,一旦物件本身發生變化,就能通知到所有觀察者。
// 抽象的通知介面
設計模式學習筆記 觀察者模式
概述 觀察者模式 oberserver 定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並自動更新。實用性 1.當乙個物件有兩個方面,其中乙個方面依賴於另乙個方面。將二者封裝在獨立的物件中以使他們可以各自獨立的改變和復用。2.當乙個物件的改變需要同時改變其他...
學習設計模式 觀察者模式
說明 觀察者模式就是有兩個角色,乙個觀察者 乙個通知者,兩者的關係是多對一。當某個是事件觸發時,通知者通知觀察者去處理相應的事件。為了解耦合,需要將兩個角色都先抽象,然後再定義具體的實現類。缺點 需要所有觀察者處理相應事件名稱一致 需求 學生自習的時候開小差,需要代表時刻觀察老師是否來了,如果來了,...
設計模式學習 觀察者模式
定義 定義物件間一種一對多的依賴關係,使得每當乙個物件發生變化時,則所有依賴於他的物件都會得到通知並自動更新。使用場景 特點 實現物件的解耦,將觀察者和被觀察者完全隔離,只依賴於observe和observable抽象。簡單實現例子 抽象觀察者類,為所有具體觀察者定義乙個介面,在得到通知時更新自己 ...