观察者模式

作者: 贾佳菊 | 来源:发表于2015-09-21 23:44 被阅读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;};
    };

    相关文章

      网友评论

        本文标题:观察者模式

        本文链接:https://www.haomeiwen.com/subject/hidicttx.html