2013-05-10 233 views
1

我正在学习设计模式,我偶然发现了一个问题,我真的不知道如何找到答案。在观察者设计模式类图中,我看到一个具体观察者通常会提到主题。但是,谁设置了该参考的价值?以及如何调用附加函数?观察者是否根据他们所拥有的主题参考来调用它,或者其他人设置主题,然后将观察者附加到主题上?我查找了一些例子,但我仍然遇到了麻烦,找到实现这一点的最佳方式。观察者模式 - 观察者创建

回答

2

观察者是希望被通知有关主题的变化或事件的组件。它决定观察这个主题,并将自己添加到主题维护的观察者列表中。

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

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

+0

谢谢。我认为这与我正在寻找的答案非常接近。 – darxsys 2013-05-10 15:51:29

1

主体是控制某些事件或具有观察员感兴趣的某些属性的对象。观察者向主体注册表示该兴趣,主体保留已注册观察者的列表。

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

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