設計模式 觀察者模式 上

2021-09-22 04:41:50 字數 981 閱讀 4372

本文參考head first設計模式一書,感覺書中的例子實在很好,很貼切。對模式的知識點進行總結,並對書的原始碼做了一定注釋。

觀察者模式要點有二:主題和觀察者。

最貼切的案例是:雜誌訂閱,雜誌是主題,觀察者是訂閱者。當出版新雜誌時候,這個事件會自動通知所有的訂閱者。

根據oo基本原則,應該針對介面程式設計(當然原因很多),主題和訂閱者一般都作為介面。

下面是head first的例子,是乙個氣象站,使用者訂閱氣象資訊的服務。

並且,終端使用者所要的資訊可能是:

針對這個需求,應用觀察者模式來實現:

但是這個只是乙個主題與觀察者的設計,觀察者自身還需要將資訊顯示出去。那麼再用乙個介面,專門來實現展示的功能。

實際上,上面的displayelement介面用再此處,本質上是策略模式的應用。

理解每個模式的特點對交流和設計都有很大幫助,當oo思想境修煉到很高的程度時,應該是忘掉所有的模式,而可以根據需要做出最佳設計,這個程度可以算手中無劍,心中有劍的地步。

下面是原始碼,只列出介面:

/** 

* 主題 

*/public

inte***ce subject

/** 

* 觀察者 

*/public

inte***ce observer

/** 

* 佈告板 

*/public

inte***ce displayelement

測試main方法:

public

static

void main(string args)

本例僅僅是為了說明這種模式,設計還遠不夠完美。實際上,主題中應該有乙個執行緒去掃瞄狀態的變化,當變化了,自動去呼叫measurementschanged()方法。

觀察者模式使用很普遍,gui程式設計中事件註冊就是典型的觀察者模式的應用。

以上是自己實現的觀察者模式,下文將講述jdk所實現的觀察者模式。

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

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

設計模式 觀察者模式

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

設計模式 觀察者模式

核心思想 註冊 通知 撤銷註冊 observer 將自己註冊到被觀察物件 subject 中,被觀察物件將觀察者存放在乙個容器 container 裡。被觀察物件發生了某種變化 如圖中的somechange 從容器中得到所有註冊過的觀察者,將變化通知觀察者。觀察者告訴被觀察者要撤銷觀察,被觀察者從容...