可以观察一个班级和观察员吗?
有一个代码气味的时刻,并不能决定如果它可以为一个类是可观察的,也是一个观察者,所以想我会在这里发表。可以观察一个班级和观察员吗?
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?
这在技术上是可以的,但你应该检查你是不是简单地重新发送收到的通知。如果这个类正在观察class1,然后被class2观察到,请尝试让这个类观察class1。
我看不到任何理由。但具体的 例子将是有用的。更好的是你已经实现的真正的代码,我们可以批评。
虽然我同意Neil,但我可以看到它是一种代码味道,因为这个类可能做得太多了。
只要对象观察其他对象的事件,并且其他对象可以观察到它就可以。但是,如果对象观察到自己可能有什么真的很奇怪。
也许一些代码将有助于了解设计模式是否以奇怪的方式使用。
这是许多基于事件的系统实现过滤器的一种方式。另一方面,在Java中,其中一个角色具有内部类,但如果过滤器具有多个角色不同的观察者,则更为常见。所以,如果你认为它可能以不同的角色结束,你可能希望它有一个你目前想要的角色的访问者getObserver() { return this; }
,但这可能是一个YAGNI,可以稍后添加。
没关系:-)。如果班级订阅其他班级活动并且可以举办自己的活动,那就没问题。当然,你可以做错,但类寻找其他类的观念是可以观察的。
它是邪恶的。 b观察a并通知c。
所以有一段代码说a.setValue(...) 和c中的某些事情发生。
现在想想这个: 那段代码反而应该说: a.setValue(...); c.doSomething(...);
当然这段代码现在必须知道a和c,但至少有 没有魔法。一切都在阳光下。 信息隐藏在面向对象是乘以2
干杯的setValue代码(...) 没有观察者/可观察的模式, L.
你可能会误入的一个变种所谓事件通道发行者 - 订阅模式,这是在POSA书中明确提到:
“在这种变化情况下,创建并放置出版商和用户之间的事件通道给出版商,事件通道出现。订阅者,而订阅者则表现为发布者“。 (第341页)
谢谢。在这种情况下,这不是重新传输。 – JamesC 2009-08-20 17:04:30