目錄
具體實現總結
觀察者模式(發布-訂閱模式)是一種行為型模式,定義一系列物件之間的一對多關係,當乙個物件改變、更新狀態時,依賴它的都會收到通知改變或者更新。在此種模式中,乙個目標物件管理所有相依於它的觀察者物件,並且在它本身的狀態改變時主動發出通知。這通常透過呼叫各觀察者所提供的方法來實現。此種模式通常被用來實現事件處理系統。
它把所有觀察者物件的引用儲存到乙個聚集裡,每個主題都可以有任何數量的觀察者。抽象主題提供乙個介面,可以增加和刪除觀察者物件。
將有關狀態存入具體觀察者物件;在具體主題內部狀態改變時,給所有註冊過的觀察者發出通知。
為所有的具體觀察者定義乙個介面,在得到主題通知時更新自己。
實現抽象觀察者角色所要求的更新介面,以便使本身的狀態與主題狀態協調。
抽象主題(被觀察者)
public inte***ce subject
具體主題
public class subjectimpl implements subject
@override
public void removeobserver(observer observer)
@override
public void notifyallobserver()
}public string getstatus()
public void setstatus(string status)
}
抽象觀察者
public inte***ce observer
具體觀察者
public class observera implements observer
}
public class observerb implements observer
}
更改狀態,來通知到其他觀察者
subjectimpl subject = new subjectimpl();
//註冊觀察者a
observer observera = new observera();
subject.registerobserver(observera);
//註冊觀察者b
observer observerb = new observerb();
subject.registerobserver(observerb);
subject.setstatus("進行中");
system.out.println("被觀察者狀態變為【進行中】,正在通知觀察者們...");
//通知所有觀察者
subject.notifyallobserver();
被觀察者狀態變為【進行中】,正在通知觀察者們...
a觀察者收到了狀態變更為【進行中】的通知
b觀察者收到了狀態變更為【進行中】的通知
當對乙個物件的改變需要同時改變其他物件,而不知道具體有多少物件需要被改變。
當乙個物件必須通知其他物件,而它又不能假定其他物件是誰。換言之,不希望這些物件是緊密耦合的。
觀察者模式解除了主題和具體觀察者的耦合,讓耦合的雙方都依賴於抽象,而不是依賴具體。
你可以在這裡獲取相關**:設計模式-observer模式
設計模式Observer
observer設計模式的定義 定義了物件之間的一對多的依賴,這樣以來,當乙個物件改變狀態時,它的所有依賴者都會受到通知並自動更新。ifndef subjec h define subjec h include observer.h class subject subject subject sub...
Observer設計模式
observer設計模式是針對 乙個物件對多個物件中,乙個物件發生狀態改變,其他附屬物件發生相應的更新。是一種松耦合的設計模式。例子 假設我們有個高檔的熱水器,我們給它通上電,當水溫超過95度的時候 1 揚聲器會開始發出語音,告訴你水的溫度 2 液晶屏也會改變水溫的顯示,來提示水已經快燒開了。現在我...
設計模式 Observer
定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。dependents,publish subscribe 適用性 結構 允許你獨立的改變subject和observer。優缺點 1.建立subject到其observer之間的對映 最簡單的方法...