有一个代码闻到了一刻,并且无法确定一个类是否可以观察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?
答案 0 :(得分:3)
技术上还可以,但您应该检查您是否只是重新发送收到的通知。如果这个类正在观察class1,然后被class2观察,那么尝试让该类观察class1。
答案 1 :(得分:1)
我没有看到任何理由。具体的 例子虽然有用。更好的是你已经实现的真实代码,我们可以批评。
答案 2 :(得分:1)
没关系:-)。如果类订阅了其他类事件并且可以引发自己的事件就可以了。当然你可以做错了,但是找到其他类并且可观察的类的概念是可以的。
答案 3 :(得分:0)
虽然我同意Neil的观点,但我觉得这可能是代码味道,因为课程可能做得太多了。
答案 4 :(得分:0)
只要对象观察到其他对象的事件,并且其他对象观察到它就可以了。但是,如果对象观察到自己可能存在非常奇怪。
也许某些代码有助于理解设计模式是否以奇怪的方式使用。
答案 5 :(得分:0)
这是许多基于事件的系统实现过滤器的一种方式。在Java中,另一个将具有其中一个角色的内部类,但如果过滤器具有多个具有不同角色的观察者,则更常见。因此,如果您认为它最终可能会有不同的角色,您可能希望它具有您当前所考虑的角色getObserver() { return this; }
的访问者,但这可能是YAGNI,可以在以后添加。
答案 6 :(得分:0)
所以有一段代码表示a.setValue(...) 并且c中发生了一些事情。
现在想一想: 那段代码应该说: a.setValue(...); c.doSomething(...);
当然,这段代码现在必须知道a和c,但至少 没有魔法。一切都在阳光下。 隐藏在oo中的信息用于setValue(...)中的代码 在观察者/可观察模式中没有乘以2。
干杯, 升。
答案 7 :(得分:0)
您可能会陷入名为事件频道的发布商订阅者模式的变体中,这在POSA书中有明确引用:
“在此变体中,会在发布者及其订阅者之间创建一个事件频道。对于发布者,事件频道显示为订阅者,而订阅者则显示为发布者”。 (第341页)