2009-08-20 127 views
4

有一个代码气味的时刻,并不能决定如果它可以为一个类是可观察的,也是一个观察者,所以想我会在这里发表。可以观察一个班级和观察员吗?

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?

回答

3

这在技术上是可以的,但你应该检查你是不是简单地重新发送收到的通知。如果这个类正在观察class1,然后被class2观察到,请尝试让这个类观察class1。

+0

谢谢。在这种情况下,这不是重新传输。 – JamesC 2009-08-20 17:04:30

1

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

0

虽然我同意Neil,但我可以看到它是一种代码味道,因为这个类可能做得太多了。

0

只要对象观察其他对象的事件,并且其他对象可以观察到它就可以。但是,如果对象观察到自己可能有什么真的很奇怪

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

0

这是许多基于事件的系统实现过滤器的一种方式。另一方面,在Java中,其中一个角色具有内部类,但如果过滤器具有多个角色不同的观察者,则更为常见。所以,如果你认为它可能以不同的角色结束,你可能希望它有一个你目前想要的角色的访问者getObserver() { return this; },但这可能是一个YAGNI,可以稍后添加。

1

没关系:-)。如果班级订阅其他班级活动并且可以举办自己的活动,那就没问题。当然,你可以做错,但类寻找其他类的观念是可以观察的。

0

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

所以有一段代码说a.setValue(...) 和c中的某些事情发生。

现在想想这个: 那段代码反而应该说: a.setValue(...); c.doSomething(...);

当然这段代码现在必须知道a和c,但至少有 没有魔法。一切都在阳光下。 信息隐藏在面向对象是乘以2

干杯的setValue代码(...) 没有观察者/可观察的模式, L.

0

你可能会误入的一个变种所谓事件通道发行者 - 订阅模式,这是在POSA书中明确提到:

“在这种变化情况下,创建并放置出版商和用户之间的事件通道给出版商,事件通道出现。订阅者,而订阅者则表现为发布者“。 (第341页)

相关问题