設計模式(4) 觀察者模式(續)

2021-09-24 13:45:33 字數 1153 閱讀 4273

簡單工廠模式和工廠模式是用來例項化類的一種設計模式,工廠模式相比簡單工廠模式實現了所有要例項化類的抽象,並根據該抽象類的子類來實現各個類的例項化物件,該方式充分體現了依賴倒置原則,充分體現了針對介面程式設計而不是針對實現程式設計的原理……

**模式是一種十分好理解的設計模式,首先是有乙個抽象的功能類,包含了所有要實現的方法或者屬性,然後真實實體和**(proxy)分別去繼承並實現方法,然而在**中,儲存了對真實實體的引用,實現的方法是真實實體的方法,當你呼叫**的時候,就相當於呼叫了真實實體的方法,由於**在訪問物件時引入了一定程度的間接性,就是因為這種間接性可以附加各種用途……

抽象類與介面的區別:抽象類是對一系列事物的概括抽象,就像動物與狗貓鼠等,然而介面是對一系列功能的抽象,就像動物介面功能是吃,跑等等,所以繼承自類只能繼承乙個,因為是動物就不能是植物,然而實現介面或者說繼承介面就可以多個,因為部分植物介面的功能,例如新陳代謝,生長等……

好的,扯多了,回到觀察者模式上來。綜合這些天看的相關**,我認為觀察模式目前主要可以通過兩種形式實現,經典的實現方式是介面(或者抽象類),通過實現抽象主題和抽象觀察者,但是要在抽象主題中保持對抽象觀察者的引用,在抽象主題中包含新增觀察者,移除觀察者,廣播觀察者三個方法,而且由於是繼承自抽象觀察者,所以方法名都相同,這樣也不符合實際情況……

怎麼樣做到進一步解耦呢,也就是說讓主題與觀察者可以互相不知道,主題不再需要儲存對觀察者的引用,而且觀察者可以各有各的執行方法名,接下來,就由我們的委託與事件出場了。

更改博文《設計模式(2)——觀察者模式》中的關於委託的例子,那個例子寫的囉嗦了,既然是委託,那麼就可以實現解耦了。

public delegate void observermethod();

public class subject//主題,發布者

}public class observer1//訂閱者1,觀察者

}public class observer2//訂閱者2,觀察者

}public class program

}

這樣看著太簡潔了,似乎還有點不習慣……利用委託充分解耦,主題和觀察者可以互不知道,主題說:反正我一根繩子在這裡,誰接著這根繩子我就通知誰,具體誰接著,我才不管。

用事件可以更好的完成,因為事件可以傳遞引數,而且更為安全……近期將著重討論委託與事件的具體區別與聯絡,會繼續補充後續內容。

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

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

設計模式 觀察者模式

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

設計模式 觀察者模式

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