Java設計模式 觀察者模式

2021-08-13 21:01:07 字數 1550 閱讀 1168

觀察者模式是乙個使用率非常高的的模式,它是一套訂閱——發布系統,這個模式最重要的作用就是將訂閱者和被訂閱者解耦。

定義物件間一種對多種的依賴關係,使得每當乙個物件改變狀態,則所有依賴於它的物件都會得到通知。

subject:抽象主題類,也就是被觀察者(observable),把所有觀察者物件儲存在乙個集合裡,每個被觀察者都可以有任意數量的觀察者,並且可以增加和刪除觀察著物件。

concretesubject:具體主題,也就是具體被觀察者,器內部狀態改變時,可以給所有註冊過的觀察者傳送通知。

observer:抽象觀察者,它定義乙個更新介面,使得在主題更改的時候通知自己。

concreteobserver:具體觀察者

1、事件會多級觸發的場景

2、需要解耦並且有事件傳遞(或作出相應改變)的若干個類的場景

3、有時可以用到跨系統的訊息交換場景,如訊息佇列、事件匯流排的處理機制。

observer和observable是jdk中的內建類,可見觀察者模式是多麼的常用和重要,為了更深一層的了解觀察者模式,這裡我們自己寫乙個簡單的觀察者模式示例,試想這麼一種場景:小明和大明同喜喜愛一本叫《白雪公主》的書,並且同事訂閱了這本書,當這本書發售新期刊的時候,要通知到小明的大明,首先我們需要乙個被觀察者(observable)的基類book:

public abstract class book
接下來是《白雪公主》:

public class snowwhite extends book 

@override

public void addobservable(observer observer)

@override

public void removeobservable(observer observer)

@override

public void update() }}

接下來寫乙個觀察者的基類:

public inte***ce observer
小明和大明作為觀察者,需要實現觀察者基類:

public class xiaoming implements observer 

}public class daming implements observer

}

好了,我們先讓小明和大明訂閱這本書,然後去更新這本書的期刊:

public static void main(string args)
log如下:

小明:我喜歡的書更新到第2期啦!

大明:我喜歡的書更新到第2期啦!

小明:我喜歡的書更新到第3期啦!

大明:我喜歡的書更新到第3期啦!

可以看到所有訂閱書籍的然都收到了通知,一對多的訂閱——發布系統就完成了。

java設計模式 觀察者模式

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

Java設計模式 觀察者模式

在物件之間定義一對多的依賴關係,這樣一來,當乙個物件改變狀態,依賴它的物件都會收到通知,並自動更新。比如有乙個天氣的資料來源,和需要獲取天氣資料的觀察者。天氣資料不定時更新。而觀察者也是隨時訂閱和取消訂閱天氣資料來源。在訂閱時,希望每次天氣資料更新時觀察者都可以獲取資訊。天氣資料來源作為被觀察的主題...

Java設計模式 觀察者模式

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