具有一个观察者和多个主题的观察者模式
我想实现观察者模式,并且希望类 X 观察类 A 和 B 中的更新。X
派生自抽象基类 XObs,它具有 update() 函数,以枚举作为所发生事件的参数。
这里的逻辑问题是 X 需要知道 A 和 B 中的哪一个发送了更新,而 X 无法从枚举参数中确定这一点。
在 update() 中添加另一个参数来告诉 A 和 B 中哪一个发送了更新,有什么优点/缺点?还有哪些其他方法可以解决这个问题? (我不想为 A 和 B 创建基类并在 update() 中发送 this 指针,因为 A 和 B 完全不同。)
谢谢,
Tomas
I want to implement the observer pattern and I want class X to observe updates in classes A and B.
X is derived from the abstract base class XObs which has the update() function taking an enum as parameter of what has happened.
The logical problem here is that X needs to know which of A and B sent the update and X cannot determine that from the enum parameter.
What are the pros/cons of adding another parameter to update() which tells which of A and B sent the update? What other ways are possible to solve this? (I rather not create a base class for A and B and send a this pointer in the update() as A and B are quite different.)
Thanks,
Tomas
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
a 和 b 的公共基类不必具有任何不同的功能 - 它只需要用来表达 A 和 B 是 Observable 的事实。从这个意义上说,A 和 B 并不是“完全不同”,而是相同的。
The common base class for a and b doesnt have to have any distinct functionality - it just needs to be used to express the fact that A and B are Observable. In this sense A and B are not 'quite different', they are the same.
我看到以下选项:
update()
- 问题是,你需要在update() 中向下转型
来检测参数是 A 还是 B,这使得解决方案变得脆弱,update()
中添加某种类型标志参数 - 这与上一个非常相似,只是少了一些面向对象update 重载()
具有不同的(A 和 B)类型参数,因此处理是分开且简单的,所以这将是我的首选选项I see the following options:
update()
- the problem is, you need to downcast inupdate()
to detect whether the parameter is of A or B, which makes the solution fragileupdate()
- this is fairly similar to the previous one, only less object orientedupdate()
with different (A and B) type parameters, thus the handling is separated and straightforward, so this would be my preferred option