本文為 C++ Software Design 書的第 25 節內容。
class Observer { public: virtual void update1( /*arguments*/ ) = 0; virtual void update2( /*arguments*/ ) = 0; }而 pull observer 的概念如下:
template<typename Subject, typename StateTag> class Observer { public: virtual void update(Subject const& subject, StateTag property) = 0; }Push observer 只得到該有的資訊;雖然比較有效率,但可能會造成不必要的通知或是 dependency。另一方面,使用 pull observer 跟 StateTag 的方法的代價是需要將 Observer class 與 Subject 類別綁在一起。 其他值得討論的特性如下:
- 可以用 std::function 來實作 Observer,減少類別繼承的使用。
- 要注意 observer 註冊或註銷的順序;另外也得注意在平行處理下的狀態。
沒有留言:
張貼留言