簡體   English   中英

觀察者設計模式與“聽眾”

[英]Observer Design Pattern vs "Listeners"

在我看來,GOF 中描述的 Observer 設計模式實際上與各種工具包中的 Listeners 相同。 概念之間是否存在差異,或者 Listeners 和 Observers 真的是一回事。

(我不是在尋找任何特定的計算機語言實現,我只是想從設計的角度理解差異(如果有的話)。是的,我知道 SOF 上類似問題有幾個答案,但它們是根深蒂固的關於特定語言的特定問題——我正在尋找設計答案,而不是語言答案。)

術語“偵聽器”是否指的是觀察者模式將取決於上下文。 例如,Java Swing 的“事件監聽器”是觀察者模式實現的一部分,而 .Net“跟蹤監聽器”則不是。

框架作者為參與給定模式實現的組件分配不同的名稱並不少見,但在討論模式本身時通常使用官方模式名稱。

關於設計,給定模式的實現通常會受到所使用的語言和平台的影響。 因此,給定框架中的觀察者模式的特定實現(可能碰巧使用術語“監聽器”來描述具體觀察者的角色)可能與設計模式書中描述的略有不同。

Gamma 等人在設計模式中對觀察者的描述有兩種性質。 人。 (GoF)。

在他們對 Observer 的描述中,其中一個 ConcreteObserver 可能表示其 Subject 發生了變化。 持有所有 ConcreteObservers 列表的 Subject 然后通知它的列表。 所有的 ConcreteObservers,包括原動機,都會做出適當的反應。

Listeners 的常見實現似乎都對來自外部的事件做出反應。

所以,我會說監聽器是觀察者的一個不太普遍的情況。

命名示例

如果您只是想知道使用什么名稱,您可能希望將“listener”用於簡單的東西,而將“observer”用於任何復雜的超出回調的東西。

我的意思是從字面上看,一個人可以通過多種方式“觀察”,但一個人只能“傾聽”某物發出的外部噪音(如回調、通知等)。

偵聽器很可能是觀察者模式的一種實現。 偵聽器本質上是在等待給定對象上發生的事件,這就是觀察者所做的。

我知道您不是在尋求特定語言的答案,但是很難抽象地談論這些東西。 因此,如果我要在 .NET 中對此進行調查,我會傾向於在 .NET Reflector 中打開一個包含偵聽器的程序集,這將允許我反匯編程序集並根據設計模式檢查其邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM