Design patterns 一个类是可观察的,一个观察者可以吗?

Design patterns 一个类是可观察的,一个观察者可以吗?,design-patterns,observer-pattern,Design Patterns,Observer Pattern,有一个代码气味的时刻,无法决定一个类是否可以被观察,也可以是观察者,所以我想我会在这里发布 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

有一个代码气味的时刻,无法决定一个类是否可以被观察,也可以是观察者,所以我想我会在这里发布

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?

我看不出有什么理由不这样做。混凝土
不过,举个例子会很有用。更好的是您已经实现的真实代码,我们可以对其进行评论。

从技术上讲,这是可以的,但您应该检查您并不是简单地重新发送收到的通知。如果这个班正在观察1班,然后被2班观察,试着让那个班观察1班

虽然我同意Neil的观点,但我可以看出这是一种代码味道,因为类可能做得太多了

只要对象观察到其他对象的事件,并且被其他对象观察到,就可以了。但是,如果物体观察到自己,可能会有一些非常奇怪的东西


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

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

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

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

所以有一段代码说a.setValue(…) c语言中发生了一些事情

现在想想: 相反,这段代码应该说: a、 设定值(…); c、 剂量测定法(…)

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

干杯,
L.

您可能误入了一种称为事件通道的出版商-订阅者模式变体,这在POSA书籍中有明确的引用:


“在此变体中,在发布服务器及其订阅服务器之间创建并放置事件通道。对于发布服务器,事件通道显示为订阅服务器,而对于订阅服务器,事件通道显示为发布服务器。”。(第341页)

谢谢。在这种情况下,这不是重新传输。