設計模式(七)裝飾者和觀察者模式

2021-06-09 07:34:24 字數 873 閱讀 3679

觀察者模式

觀察者模式完美的將觀察者和被觀察物件分開,系統中的每個類將重點放在某乙個功能上,而不是其他的方面(物件之間的互動),很好的體現了單一職責原則。觀察者將自己註冊到被觀察者的容器中,被觀察者不應該過問觀察者的具體型別,而是使用觀察者的介面。這樣的優點是:假定程式中還有別的觀察者,那麼這個觀察者是相同的介面即可,基於介面而不是具體的實現,這一點為程式提供了更大的靈活性。

現實生活中像移動的就業資訊推送系統,希望得到業務的人(觀察者)先到移動註冊,然後如果有具體的資訊,移動會主動的推送到預訂業務的人,不需要預訂業務的人去主動詢問。

裝飾者模式

裝飾者模式不在不改變原類檔案的情況下動態的擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。當我們需要為某個物件動態地增加乙個功能的或職責的時候,可以考慮使用裝飾者模式;當某個物件的職責經常發生變化或者經常需要動態的增加職責,避免為了適應變化而增加愛繼承子類擴充套件的方式,因為這種擴充套件可能會造成子類膨脹的速度過快,難以控制,此時可以使用裝飾著模式。

對於這中模式的實現,會有被裝飾的具體物件,被裝飾的抽象,裝飾者的抽象,和若干個裝飾著,這若干個裝飾者並不是建立各種不同的物件(所以裝飾者模式為結構型模式而不是建立型模式),而是每個裝飾者都會有乙個真實的物件的引用,然後在這個具體物件方法的前後新增一些新的功能,起到裝飾的作用。例如有兩個裝飾1,和裝飾2,那麼可以把裝飾1當作裝飾2的具體物件作為引數傳進去,這個時候就會產生另外一種新的裝飾了,而且沒有新的子類。

現實生活著的例子例如包餃子,步驟分為和陷,和面,桿皮,包餃子,煮餃子,可以在和陷這個方法的前面多加點配菜,也可以在和面這個方法的前面在面裡面加個雞蛋,也可以同時用這兩個裝飾先加菜後和麵加雞蛋,這樣就可以用兩個已經存在的裝飾產生乙個新的裝飾了。

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

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

設計模式 觀察者模式

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

設計模式 觀察者模式

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