type
status
date
slug
summary
tags
category
icon
password
意图
定义对象之间的一对多依赖,当一个对象状态改变时,它的所有依赖都会收到通知并且自动更新状态
主题(Subject)是被观察的对象,而其所有依赖者(Observer)称为观察者
它的优点是:
- 观察者和被观察者是抽象耦合的
- 建立一套触发机制
缺点是:
- 如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间
- 如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃
- 观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化
类图
主题(Subject)具有注册和移除观察者、并通知所有观察者的功能,主题是通过维护一张观察者列表来实现这些操作的
观察者(Observer)的注册功能需要调用主题的 registerObserver() 方法
Demo
实战案例
假设我们在开发一个 P2P 投资理财系统,用户注册成功之后,我们会给用户发放投资体验金。这里的 Observer(观察者)就是一组实现 RegObserver 的实现类,Subject(被观察者)通知所有观察者的功能就是用户注册返回的 userId