美文网首页
行为模式--观察者模式

行为模式--观察者模式

作者: kirito_song | 来源:发表于2020-04-14 16:20 被阅读0次

算是读书笔记吧

极客时间--设计模式之美


观察者模式

Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。

观察者模式(Observer Design Pattern)也被称为发布订阅模式(Publish-Subscribe Design Pattern)

一般情况下,被依赖的对象叫作被观察者(Observable)依赖的对象叫作观察者(Observer)

经典的观察者模式

经典的观察者模式很简单,被观察者持有一个列表,其中保存着观察者们。
在适当的时机,将想要发送的消息,通过遍历列表的方式对应的方法通知观察者们。


public interface Subject {
  void registerObserver(Observer observer);
  void removeObserver(Observer observer);
  void notifyObservers(Message message);
}

public class ConcreteSubject implements Subject {
  private List<Observer> observers = new ArrayList<Observer>();

  @Override
  public void registerObserver(Observer observer) {
    observers.add(observer);
  }

  @Override
  public void removeObserver(Observer observer) {
    observers.remove(observer);
  }

  @Override
  public void notifyObservers(Message message) {
    for (Observer observer : observers) {
      observer.update(message);
    }
  }
\
}

在新增联动事件时,只需要再添加一个实现了 Observer 接口的类,并且通过 registerObserver() 函数将它注册到 ConcreteSubject 类中即可,并不需要修改 ConcreteSubject 内部函数。
达到让主类 ConcreteSubject 满足开闭原则的目的。


生产者 - 消费者模型

1、你把信写好——相当于生产者制造数据

2、你把信放入邮筒——相当于生产者把数据放入缓冲区

3、邮递员把信从邮筒取出——相当于消费者把数据取出缓冲区

4、邮递员把信拿去邮局做相应的处理——相当于消费者处理数据

与经典观察者模式的区别

  1. 阻塞方式不同
    由于中间件的存在,生产者 - 消费者模型是天生的异步调用
  2. 对应关系不同
    生产者 - 消费者模型中的数据单元是一对一(消息由一个生产者产出,被一个消费者消费)
    生产者 - 消费者模型中的生产者与消费者是多对多(随机生产者生产的消息,被随机的消费者消费)
    观察者模式是一对多(一个被观察者生产的消息,被多个观察者消费)

异步的观察者模式

最简单的异步观察者实现就是将 notifyObservers 改为异步调用。

当然也有很多成熟的异步观察者模式框架,比如EventBus、RxJava、RxBus等等。

通常他们也有一个中间者负责管理注册表,其中有很多并发的安全处理、查找算法等等各项优化。

相关文章

  • 行为型模式:观察者模式

    行为型模式:观察者模式 十一大行为型模式之七:观察者模式。 简介 姓名 :观察者模式英文名 :Observer P...

  • 观察者模式

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

  • 设计模式-观察者模式

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

  • 观察者模式(C++实现)

    一、什么是观察者模式 1.1观察者模式的概念 观察者模式(observer pattern)是一种对象行为模式。...

  • Observer模式

    观察者模式(Observer模式) 定义 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subs...

  • 行为模式10-行为模式总结

    行为模式10-行为模式总结 行为模式总共有11个设计模式: 观察者模式(Observer) 中介者模式(Media...

  • JAVA设计模式_观察者模式

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

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

    观察者模式 观察者模式也被称为发布-订阅(Publish/Subscribe)模式,它属于行为型模式的一种。观察者...

  • 设计模式(五)观察者模式

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

  • 设计模式[15]-观察者模式-Observer Pattern

    1.观察者模式简介 观察者模式(Observer Pattern)是行为型(Behavioral)设计模式,定义了...

网友评论

      本文标题:行为模式--观察者模式

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