2023年4月2日 星期日

C++:簡介 Observer pattern

本文為 C++ Software Design 書的第 25 節內容。

Observer pattern 的目的是建立一個一對多的關係,使得當一個物件改變其狀態時,所有的依賴物件都會被通知到。Observer pattern 分成兩種模式:push 與 pull。Push observer 的概念如下:
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 註冊或註銷的順序;另外也得注意在平行處理下的狀態。

沒有留言:

張貼留言