观察者模式

作者: 贾佳菊 | 来源:发表于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;};
};

相关文章

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 前端面试考点之手写系列

    1、观察者模式 观察者模式(基于发布订阅模式) 有观察者,也有被观察者。 观察者需要放到被观察者列表中,被观察者的...

  • RxJava 原理篇

    一、框架思想 观察者模式观察者自下而上注入被观察者被观察者自上而下发射事件观察者模式 装饰器模式自上而下,被观察者...

  • 观察者模式

    观察者模式概念 观察者模式是对象的行为模式,又叫作发布-订阅(publish/subscrible)模式。 观察者...

  • 设计模式-观察者模式

    观察者模式介绍 观察者模式定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为...

  • 观察者模式

    观察者模式 观察者模式的定义 观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/s...

  • iOS设计模式之观察者模式

    观察者模式 1、什么是观察者模式 观察者模式有时又被称为发布(publish)-订阅(Subscribe)模式、模...

  • 观察者模式和发布订阅模式区别

    观察者模式 所谓观察者模式,其实就是为了实现松耦合(loosely coupled)。 在观察者模式中,观察者需要...

  • RxJava(二)

    一、观察者模式 1.1、传统的观察者模式 1.2、RxJava 的观察者模式 区别传统的观察者模式是一个 Obse...

网友评论

    本文标题:观察者模式

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