一个类可以观察和观察者是否可以?

时间:2009-08-20 16:55:51

标签: design-patterns observer-pattern

有一个代码闻到了一刻,并且无法确定一个类是否可以观察Observable,还是一个Observer,所以我想发布在这里。

class ObservableAndObserver extends Observable implements Observer {

 // Class is ofcourse registering and receving notifcations on different events
 // effectly actving as a middle man. 

 // Is this a pattern in itself?  'middleman-pattern' ??

}

思考?打破SRP?

8 个答案:

答案 0 :(得分:3)

技术上还可以,但您应该检查您是否只是重新发送收到的通知。如果这个类正在观察class1,然后被class2观察,那么尝试让该类观察class1。

答案 1 :(得分:1)

我没有看到任何理由。具体的 例子虽然有用。更好的是你已经实现的真实代码,我们可以批评。

答案 2 :(得分:1)

没关系:-)。如果类订阅了其他类事件并且可以引发自己的事件就可以了。当然你可以做错了,但是找到其他类并且可观察的类的概念是可以的。

答案 3 :(得分:0)

虽然我同意Neil的观点,但我觉得这可能是代码味道,因为课程可能做得太多了。

答案 4 :(得分:0)

只要对象观察到其他对象的事件,并且其他对象观察到它就可以了。但是,如果对象观察到自己可能存在非常奇怪

也许某些代码有助于理解设计模式是否以奇怪的方式使用。

答案 5 :(得分:0)

这是许多基于事件的系统实现过滤器的一种方式。在Java中,另一个将具有其中一个角色的内部类,但如果过滤器具有多个具有不同角色的观察者,则更常见。因此,如果您认为它最终可能会有不同的角色,您可能希望它具有您当前所考虑的角色getObserver() { return this; }的访问者,但这可能是YAGNI,可以在以后添加。

答案 6 :(得分:0)

这是邪恶的。 b观察并通知c。

所以有一段代码表示a.setValue(...) 并且c中发生了一些事情。

现在想一想: 那段代码应该说: a.setValue(...); c.doSomething(...);

当然,这段代码现在必须知道a和c,但至少 没有魔法。一切都在阳光下。 隐藏在oo中的信息用于setValue(...)中的代码 在观察者/可观察模式中没有乘以2。

干杯, 升。

答案 7 :(得分:0)

您可能会陷入名为事件频道的发布商订阅者模式的变体中,这在POSA书中有明确引用:

“在此变体中,会在发布者及其订阅者之间创建一个事件频道。对于发布者,事件频道显示为订阅者,而订阅者则显示为发布者”。 (第341页)