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页)谢谢。在这种情况下,这不是重新传输。