設計模式 觀察者模式詳解

2021-07-24 05:22:33 字數 2521 閱讀 9132

0.

前言寫在最前面,本人的設計模式類博文,建議先看博文前半部分的理論介紹,再看後半部分的例項分析,

最後再返回來複習一遍理論介紹

,這時候你就會發現我在重點處

標紅的用心,對於幫助你理解設計模式有奇效哦

~此篇總結整理設計模式中的

觀察者模式

1.

觀察者模式介紹

觀察者模式定義:

觀察者模式定義了乙個一對多的依賴關係,使得當被觀察者狀態發生改變時,與之相依賴的所有觀察者物件都能得到通知並自動更新。

觀察者模式的使用場景:(1

)跨系統的訊息交換場景。(2

)關聯行為的場景。

觀察者模式角色介紹:

:抽象被觀察者

,抽象被觀察者類提供一系列介面,可以增加、刪除、通知觀察者物件。(2

)concretesubject

:具體被觀察者

,內部維護乙個觀察者集合,並實現抽象被觀察者類的抽象方法。(3

)observer

:抽象觀察者

,定義乙個更新介面,使得在得到收到更改通知時更新自己。(4

)concrereobserver

:具體觀察者

,實現抽象觀察者定義的更新介面,並維護一些自己的成員變數。

2

例項介紹

2.1  observer

抽象觀察者介面

public inte***ce observer
2.2  concrereobserver具體觀察者類

public class user implements observer 

@override

public void update (string message)

}

2.3  subject抽象被觀察者介面

public inte***ce subject
2.4  concretesubject具體被觀察者類

public class concretesubject implements subject 

@override

public void removeobserver (observer observer)

@override

public void notify(string message) }}

2.5使用時

concretesubject mconcretesubject =new concretesubject ();

user user1=new user ("張三");

user user2=new user ("李四");

mconcretesubject. addobserver(user1);

mconcretesubject. addobserver(user2);

mconcretesubject.notify("這是第一篇被推送的文章");

mconcretesubject. removeobserver (user2);

mconcretesubject.notify("這是第二篇被推送的文章");

2.5  執行結果

張三收到通知-這是第一篇被推送的文章

李四收到通知-這是第一篇被推送的文章

張三收到通知-這是第二篇被推送的文章

3觀察者模式的優缺點

觀察者模式的優點:(1

)觀察者只需等待主題通知,無需了解主題相關的細節;同時主題只負責通知觀察者,無需了解觀察者如何處理通知。

實現了觀察者和被觀察者(耦合的雙方)依賴於抽象耦合。(2

)觀察者增加或刪除無需修改主題的**,只需呼叫主題對應的增加或者刪除的方法即可。

增強了程式的可維護性和可拓展性

。觀察者模式的缺點:(1

)主題持有觀察者的引用,如果從主題中刪除觀察者時未正常處理,會導致

觀察者無法被**。(

2)訊息的通知

順序執行

,如果乙個觀察者卡頓,會影響整體的執行效率,若遇到這種情況,一般會採用非同步實現。

最後請大家多多點贊~

python 設計模式 觀察者 觀察者設計模式

在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...

設計模式詳解(十八) 觀察者模式

設計一套報紙發布 訂閱的程式設計 一種解決方式是報刊只負責生產報紙,發布內容。由各個訂閱者自己去報亭拿自己的報紙。這種方式會導致各個訂閱者需要不間斷地輪詢報亭取報紙,造成資源的浪費。所以這類問題一般會採用觀察者模式來實現。觀察者模式 observer pattern 指多個物件間存在一對多的依賴關係...

設計模式 觀察者模式

觀察者模式定義了物件間一對多的依賴關係,乙個物件發生變化時,所有依賴它的物件都得到通知並被自動更新。本文主要闡述觀察者模式在分布式scada人機介面中的使用,利用這種模式使得人機介面顯示效率更高。發布者 郵局 觀察者 參與者 讀者 訂閱者 當郵局收到報社新雜誌的時候,即郵局狀態發生了改變,於是郵局把...