設計模式 Observer模式

2021-09-27 08:06:00 字數 1754 閱讀 7657

目錄

具體實現總結

觀察者模式(發布-訂閱模式)是一種行為型模式,定義一系列物件之間的一對多關係,當乙個物件改變、更新狀態時,依賴它的都會收到通知改變或者更新。

在此種模式中,乙個目標物件管理所有相依於它的觀察者物件,並且在它本身的狀態改變時主動發出通知。這通常透過呼叫各觀察者所提供的方法來實現。此種模式通常被用來實現事件處理系統。

它把所有觀察者物件的引用儲存到乙個聚集裡,每個主題都可以有任何數量的觀察者。抽象主題提供乙個介面,可以增加和刪除觀察者物件。

將有關狀態存入具體觀察者物件;在具體主題內部狀態改變時,給所有註冊過的觀察者發出通知。

為所有的具體觀察者定義乙個介面,在得到主題通知時更新自己。

實現抽象觀察者角色所要求的更新介面,以便使本身的狀態與主題狀態協調。

抽象主題(被觀察者)

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之間的對映 最簡單的方法...