本文為 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 註冊或註銷的順序;另外也得注意在平行處理下的狀態。
沒有留言:
張貼留言