2015-04-01 70 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