观察者模式与一个观察者和许多科目

时间:2010-07-27 07:55:08

标签: c++ oop observer-pattern

我想实现观察者模式,我希望类X能够观察类A和B中的更新。

X派生自抽象基类XObs,它具有update()函数,将枚举作为发生的事件的参数。

这里的逻辑问题是X需要知道A和B中的哪一个发送了更新,X无法从枚举参数中确定。

向update()添加另一个参数的优缺点是什么,它告诉A和B中哪一个发送了更新?还有哪些方法可以解决这个问题? (我宁愿不为A和B创建一个基类,并在update()中发送一个this指针,因为A和B是完全不同的。)

谢谢,

托马斯

2 个答案:

答案 0 :(得分:1)

a和b的公共基类不必具有任何不同的功能 - 它只需要用来表示A和B是Observable这一事实。在这个意义上,A和B并不是“完全不同”,它们是相同的。

答案 1 :(得分:0)

我看到以下选项:

  • 使A和B都实现一个公共的Observable基类(并将它们作为参数传递给update() - 问题是,您需要在update()中向下转换以检测参数是否为A或B,这使解决方案变得脆弱
  • 将某种类型的标志参数添加到update() - 这与前一个非常相似,只是面向对象少了
  • 模板化Observer / Observable实现 - 我没有完全解决这个问题(我没有C ++ IDE来验证它),但我相信这样你可以有两个{{1的重载使用不同的(A和B)类型参数,因此处理是分开的和直接的,所以这将是我的首选选项
相关问题