观察者模式 - 观察者创建

时间:2013-05-10 15:40:14

标签: oop design-patterns observer-pattern

我正在学习设计模式,我偶然发现了一个我真不知道如何找到答案的问题。在观察者设计模式类图中,我已经看到具体观察者通常具有对主题的引用。但是,谁设定了该参考的价值?如何调用Attaching函数?观察者是根据他们所拥有的主题参考来自己调用它,还是其他人设置主题然后将观察者附加到主题上?我已经找了一些例子,但我仍然遇到了解决实现这个​​问题的最佳方法的麻烦。

2 个答案:

答案 0 :(得分:2)

观察者是希望收到关于主题变化或事件的通知的组件。它决定观察主题并将其添加到主题所维持的观察者列表中。

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

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

答案 1 :(得分:1)

主体是控制某些事件或具有观察者感兴趣的某些属性的对象。观察者向主体注册以表达该兴趣,并且主体保留了那些注册观察者的列表。

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

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