2012-04-26 86 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

除了遗漏细节之外,我会猜测'消息'会观察时钟对象以及时触发'动作'。取决于'如何'(观察)?这是实施它可能意味着更改时钟是必要的。 观察者模式是'我们称之为 - 不要叫我们'模式。它基本上可以防止昂贵的繁忙等待循环。