CodeEase

观察者模式

2015-09-21  本文已影响33人  贾佳菊

观察者模式:在对象之间定义一个一对多的依赖,这样在一个对象状态发生改变时其他对象都会收到通知,并自动更新。

原则:为交互对象之间的松耦合度设计而努力。

类图:

屏幕快照 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;};
};
上一篇下一篇

猜你喜欢

热点阅读