2012-04-26 91 views
3

我讀了一本關於觀察者模式的書。它提供了以下示例:clock爲什麼我們需要觀察者模式?

類,與方法time()

message類,這3類繼承它:Fax, Mail, Memo

應用程序想要在12am抵達時發送消息。

這本書推薦觀察者模式。它說如果我們添加新的類:VideoMsg它擴展了消息,它會影響類Clock的實現。但我不明白爲什麼。類Clock將持有message的對象的集合,如果我們將添加一個新的繼承類,它將不會更改時鐘類。

如果有人會解釋上面的例子,或者給出一個更好的例子,我將不勝感激。

+0

你是否在這裏搜索觀察者模式? http://stackoverflow.com/search?q=observer+pattern – albertjan 2012-04-26 10:19:07

+0

檢查這些http://stackoverflow.com/questions/1249517/super-simple-example-of-c-sharp-observer-observable-with-代表或者http://www.codeproject.com/Articles/6384/Observer-Pattern-in-NET – userGS 2012-04-26 10:20:27

+0

@userGS:我明白如何實現觀察者pattren。我不明白我們爲什麼需要它。 – 2012-04-26 10:21:38

回答

3

,讓你瞭解Observer pattern

如果有1000人訂閱每日報紙。

每當新副本到達時(例如每天),發佈者都將向其訂閱者發送副本。

同樣的方法一旦有新的信息,一個類將向觀察者發送信息。

0

老實說很難給出答案,因爲在這個例子中沒有太多的實現細節。

在觀察者模式中,「觀察對象」(Subject)將持有對觀察者的引用,並且Subject是,通常負責構建發送給觀察者的「消息」。這意味着,如果您需要向觀察者通知新消息,則需要更改Subject的實現,因爲它需要了解新消息的構建方式。

但是,這只是描述了正常觀察者模式的實現。正如你所說的,可能會有的情況或變體可能會使對象不依賴於消息。

1

由於新新類,它是一個觀察者,只會調用時鐘實例subscribe方法,並且當時鍾打12AM,它將調用notifyObservers方法,它會遍歷用戶,要求他們notify方法告訴他們現在已經是12AM了。

而且他們會以自己的方式對它們做出反應,向用戶顯示一條消息或者響起或者其他任何東西,而且在你的時鐘實現中你不需要改變任何東西。

簡單的話
0

的實質是:

的observees並不需要持有觀察者的引用,只是提供描述的行爲,當它被通知的處理程序。

將觀察者模式與OO理論的繼承和多態性相結合,您將看到您的代碼將如何變爲靈活。

0

除了遺漏細節之外,我會猜測'消息'會觀察時鐘對象以及時觸發'動作'。取決於'如何'(觀察)?這是實施它可能意味着更改時鐘是必要的。 觀察者模式是'我們稱之爲 - 不要叫我們'模式。它基本上可以防止昂貴的繁忙等待循環。