2015-04-01 36 views
0

我正在C++中实现观察者模式。 观察者对象在通知时需要访问Observed类的成员变量。引用观察类作为C++中Observer的成员变量

class Observer{ 
    public: 
    Observer(const Observable& obs) : observed_(obs){} 
    void notify(const Event& event){ 
     // get Observable member and do stuff 
    } 
    private: 
    const Observable& observed_; 
} 
class Observable{ 

     public: 
     void notify(const Event& event){ 
      //observer list.notify 
     } 

} 

是参考这种模式的一个很好的方式或者是更好地使用其他策略:现在我如下已经解决了这件事情将观察到的类的引用作为观察员的成员变量?

+0

我个人更喜欢指针而不是引用作为类的成员*。这样,就有可能分配观察员,这在某些情况下可能有用。 – 2015-04-01 18:23:51

回答

0

在这种情况下,我建议将Observable实例作为Event的成员发送,这样Observer可以看多个对象,并且还可以实现两个类之间的松散耦合。

+0

在一个复杂的体系结构中,这可能是一个问题,因为我使用通用事件来实现观察者类(通常Observer是由不同具体观察者继承的基类),因此,将特定类作为通知函数的参数需要使用dynamic_cast,除了一些特殊情况外,通常是设计不好的标志。无论如何,我没有在问题中指定观察者是继承的,所以你的建议在某些情况下可能会有所帮助。 – gcswoosh 2015-04-02 08:45:27

+0

您可以使用泛型以避免强制转换,假设Observer监视相同类型的对象。 – Cristik 2015-04-02 09:25:50