观察者模式
设计模式源码git地址:design-pattern-src: 设计模式源码 (gitee.com)
- 定义
- 角色
- 使用场景
- 缺点
- Java实现
- 总结
定义
当一个对象状态发生改变时,依赖它的所有对象都会得到通知并通知自动更新
角色
抽象主题(Subject):也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者的抽象方法。
具体主题(ConcreteSubject):也叫具体目标类,它实现抽象目标中的通知方法,当具体主题的内部状态发生改变时,通知所有注册过的观察者对象。
抽象观察者(Observer):它是一个抽象类或接口,它包含了一个更新自己的抽象方法,当接到具体主题的更改通知时被调用。
具体观察者(ConcreteObserver):实现抽象观察者中定义的抽象方法,以便在得到目标的更改通知时更新自身的状态。
使用场景
1、存在一对多的对象关系,一个对象改变影响其他对象
2、广播机制。如邮件订阅,公众号订阅、up的关注等
缺点
在观察者过多的时候,通知效率会降低
Java实现
uml类图,可以看到具体目标对象与观察者的耦合很小
如何调用
1 | //创建目标对象 |
抽象主题(目标对象抽象类)
1 | public abstract class Subject { |
抽象观察者
1 | public class ConcreteSubject extends Subject { |
具体观察者
1 | public class ConcreteObserver1 implements Observer { |
这样一个简单的模式就搭出来了,结果输出
1 | 目标对象状态发生改变,通知给所有观察者 |
总结
监听器类都是观察者模式的一种体现
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 柠檬大师的空间站!
评论