行為模式之觀察者模式註解

2021-06-01 14:00:18 字數 912 閱讀 5747

觀察者模式要求當某乙個主題subject物件的某乙個狀態發生變化時,能夠通知其他的物件,當然因為主題要通知其他物件,則主題本身需要提供注入觀察者角色物件的入口,即主題需要有對該主題物件感興趣的物件的引用,當主題的某個狀態發生變化,即某個觀察者物件感興趣的狀態發生變化,則主題就可以直接通知觀察者物件了。

抽象主題角色subject的**如下:

public inte***cesubject

public voiddetach(observerobserver)

public voidnotifyobservers()

}publicenumerationobservers()

注意上面的observers()方法給出的enumeration物件是聚集的乙個拷貝,是為了使外界不能修改主題自己所使用的物件。

抽象觀察者角色observer的**如下:

public inte***ceobserver

另外關於具體主題中的聚集物件,也是可以將其上移至抽象主題角色中的,此時subject就不應該為乙個介面,而是乙個抽象類。比如按下圖的方式進行實現,這種方式可能更為常用。

此時的subject為乙個抽象類。當concretesubject某個狀態改變時,則其呼叫notifyobservers方法進行通知觀察者。

觀察者模式與責任鏈模式的區別,觀察者模式中的所有觀察者彼此之間的地位是平等的,都是平等地對某乙個訊息進行響應,而責任鏈中雖然也有多個物件對某一訊息進行響應,但是其彼此關係是不平等的,某乙個物件依賴於其呼叫物件的引用。即觀察者模式中觀察者物件的呼叫是由主題角色進行平等呼叫的,而責任鏈模式中的責任物件則是由引用它的責任物件進行呼叫的,那麼引用物件既可以呼叫也可以不呼叫。

行為模式(觀察者模式)

觀察者模式,也稱發布 訂閱模式,定義了乙個被觀察者和多個觀察者的 一對多的物件關係。在被觀察者狀態發生變化的時候,它的所有觀察者都會收到通知,並自動更新。觀察者模式通常用在實時事件處理系統 元件間解耦 資料庫驅動的訊息佇列系統,同時也是mvc設計模式中的重要組成部分。以下我們以訂單建立為例。當訂單建...

行為模式 觀察者 模式

觀察者模式應用比較廣泛,又被稱為 發布 訂閱 模式。它用來定義物件間一種一對多的依賴關係,當乙個物件的狀態發生變化時,所有依賴它的物件都得到通知並被自動更新。觀察者模式的角色有 抽象主題 具體主題 發布者 抽象觀察者和具體觀察者 訂閱者 from abc import abcmeta,abstrac...

觀察者模式 行為

當物件間存在一對多關係時,則使用觀察者模式 observer pattern 比如,當乙個物件被修改時,則會自動通知依賴它的物件。觀察者模式屬於行為型模式。意圖 定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。主要解決 乙個物件狀態改變給其他物...