觀察者模式

觀察者模式:在對象之間定義一個一對多的依賴,這樣在一個對象狀態發生改變時其他對象都會收到通知,并自動更新。

原則:為交互對象之間的松耦合度設計而努力。

類圖:

屏幕快照 2015-09-21 22.58.25.png
  1. 主題維護者一個觀察者列表,任何一個繼承了 Observer 的類都可以將自己注冊成為觀察者,當主題的狀態改變時,會用方法調用的方式(調用 update 方法)來通知觀察者,各個觀察者再實現自己的 update 方法。
  2. 每一個觀察者在初始化時都會傳入一個主題,并且將自己注冊在這個主題上,運行時也可以動態的從主題中移除或者注冊自己。
  3. 主題 has-a 多個觀察者,觀察者 has-a 主題,它們之間通過這種“組合”來交互,從而降低了耦合度。而注冊、移除、發送通知都遵循同樣的接口,從而實現了面向接口編程。

CPP 代碼

主題:

class SubjectInterface {
public:
  virtual void registerObserver(Observer *observer)  = 0;
  virtual void removeObserver(Observer *observer)  = 0;
  virtual void notifyObservers()  = 0;
};

class Subject : public SubjectInterface{
public:
  Subject();
  void registerObserver(Observer *observer)  override;
  void removeObserver(Observer *observer)  override;
  void notifyObservers()  override;

private:
  std::vector<Observer *> observers;
};

觀察者:

 class Subject;

class Observer{
public:
  virtual void update() = 0;
  Subject *subject;
};

class ConcreteObserver1 : public Observer{

public:
 ConcreteObserver1(Subject *sub);
  void update() override;
  void setSubject(Subject *subj) {subject = subj;};
};

class ConcreteObserver2 : public Observer{
public:
  ConcreteObserver2(Subject *sub);
  void update() override;
  void setSubject(Subject *subj) {subject = subj;};
};
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容