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人機介面中的使用,利用這種模式使得人機介面顯示效率更高。發布者 郵局 觀察者 參與者 讀者 訂閱者 當郵局收到報社新雜誌的時候,即郵局狀態發生了改變,於是郵局把...