观察者模式
介绍
观察者模式也称监听模式、发布/订阅模式、模型/视图模式、源/监听器模式、从属者模式等,是一种对象行为型模式。
其原理是在对象间定义一种一对多
的依赖关系,当这个对象状态发生改变时,所有依赖它的对象都会被通知并自动更新。
核心是在被观察者与观察者之间建立一种自动触发的关系。
模型 - python示例
1 | # 引入 ABCMeta 和 abstractmethod 来定义抽象类和抽象方法 |
描述
推模型 拉模型
观察者模式可以根据侧重功能分为推模型和拉模型。
推模型指在事件触发时被观察者
向观察者
推送主题的详细信息,而拉模型则是只推送少量信息,由观察者
自行决定是否需要拉取更多数据信息。
场景
- 当多个对象的动作执行依赖于某个特定事件的发生
- 当一个对象的更新需要关联更新多个对象
优缺点
优点
- 降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系
- 目标与观察者之间建立了一套触发机制
- 支持广播通信
- 符合“开闭原则”的要求
在面向对象编程领域中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。该特性在产品化的环境中是特别有价值的,在这种环境中,改变源代码需要代码审查,单元测试以及诸如此类的用以确保产品使用质量的过程。遵循这种原则的代码在扩展时并不发生改变,因此无需上述的过程。
缺点
- 目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环引用
- 当观察者对象很多时,通知的发布会花费很多时间,影响程序的效率
1 | 【非原创声明】本文内容参考以下来源,此处仅做记录分享,如有侵权可联系删除 |