Java設計模式 觀察者模式

2021-08-13 03:06:15 字數 1396 閱讀 6079

在物件之間定義一對多的依賴關係,這樣一來,當乙個物件改變狀態,依賴它的物件都會收到通知,並自動更新。

比如有乙個天氣的資料來源,和需要獲取天氣資料的觀察者。天氣資料不定時更新。而觀察者也是隨時訂閱和取消訂閱天氣資料來源。在訂閱時,希望每次天氣資料更新時觀察者都可以獲取資訊。

天氣資料來源作為被觀察的主題,需要對外提供訂閱、取消訂閱、發布天氣資料給訂閱者功能。此外還有乙個更新自己的天氣資料的功能,這個更新動作會觸發天氣資料的發布。所以被觀察者抽象類可以如下定義:

public

inte***ce observable

其實現類如下:

public

class

weatherobservable

implements

observable

public

void

deleteobserver(observer observer)

public

void

notifyobservers()

}public

void

datachange(string weatherdata)

public object getweatherdata()

public listgetobservers()

}

觀察者需要提供訂閱被觀察者後,被觀察者更新資料通知訂閱方的介面功能。觀察者抽象類可以如下定義:

public

inte***ce observer

其中的資料傳遞物件暫定為string型別。

其實現類為:

public

class

weatherobservera

implements

observer

public

void

showweatherdata()

}

其中為了方便測試類展示,我們給觀察者a加入乙個展示天氣的功能。

測試類如下:

class observertest 

}

測試結果如下

天氣資料更新了:當前氣溫2攝氏度
上述的觀察者模式訊息觸發的方式只有一種,被觀察者在訊息發生變化時推送給觀察者。也可以擴充套件出觀察者拉取訊息的模式。

觀察者模式定義了一種存在訊息傳遞依賴關係時物件的組合和執行機制。這種組合關係可以動態的建立和取消。訊息發布者和訂閱者做到一定程度上的最低耦合關係。

但是觀察者模式在實際使用中的缺點也是明顯的。比如逐一通知,訂閱方收到訊息的時間不同,如果有乙個訂閱方出現問題會導致後續的都出問題,等等。

java設計模式 觀察者模式

本例以貓和老鼠來講解觀察者,首先定義觀察者為 老鼠和主人,被觀察者為貓,如下 public inte ce observer public class event public string getname public class mouse implements observer public ...

Java設計模式 觀察者模式

觀察者模式是乙個使用率非常高的的模式,它是一套訂閱 發布系統,這個模式最重要的作用就是將訂閱者和被訂閱者解耦。定義物件間一種對多種的依賴關係,使得每當乙個物件改變狀態,則所有依賴於它的物件都會得到通知。subject 抽象主題類,也就是被觀察者 observable 把所有觀察者物件儲存在乙個集合裡...

Java設計模式 觀察者模式

觀察者模式即發布訂閱模式,發布者發布資訊,訂閱者獲取資訊。當發布者改變狀態時,依賴它的訂閱者會收到通知並自動更新。抽象被觀察者角色 提供增加 刪除 通知觀察者的介面。具體被觀察者角色 用乙個集合儲存所有被觀察者物件,實現增加 刪除 通知觀察者的功能。抽象觀察者角色 為所有的具體觀察者定義乙個介面,在...