1

我正在学习设计模式,我偶然发现了一个我真的不知道如何找到答案的问题。在观察者设计模式类图中,我看到具体的观察者通常具有对主题的引用。但是,谁设定了该参考的价值?以及如何调用附加功能?观察者是根据他们拥有的主题引用自己调用它,还是其他人设置主题然后将观察者附加到主题?我一直在寻找示例,但我仍然无法找到实现此功能的最佳方法。

4

2 回答 2

2

观察者是希望收到有关主题更改或事件的通知的组件。它决定观察主题并将自己添加到主题维护的观察者列表中。

典型的用例是一个包含按钮的图形面板。图形面板创建一个按钮并将其添加到自身。并且它希望每次单击按钮时都显示一个对话框。所以它将自己添加为按钮的观察者,并且按钮在单击时通知面板。

在这个例子中,观察者创建了它观察到的对象。但在某些情况下,情况并非如此,当对主题的引用作为参数传递给其构造函数或其方法之一时。这与观察者模式本身的原理无关。

于 2013-05-10T15:50:15.650 回答
1

Subject 是一个对象,它控制某些事件或具有观察者感兴趣的某些属性。观察者向主题注册自己以表达这种兴趣,并且主题保留这些注册观察者的列表。

当 Subject 的属性发生变化或感兴趣的事件发生时,Subject 会遍历其已注册的观察者列表并将更改或事件通知他们。

如何通知观察者的细节可能会有所不同。可能是他们有一个众所周知的方法被调用。可能是他们指定了他们想要调用的自定义方法,他们将其指定为注册过程的一部分。

于 2013-05-10T15:49:18.833 回答