观察者模式
定义
Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖它的对象都会得到通知并且自动更新;
分析
观察者模式是一个在项目中常用的模式,也叫作发布-订阅模式;
观察者模式实际上对建立触发机制的一种指导模式。比如,在森林中发出一声枪响,则兔子会藏到洞里,松鼠则会爬山树等。开枪的人不需要通知兔子或者松鼠,只需要发布“枪响”这一事件即可。当然,兔子和松鼠首先要关心“枪响”这一事件,即首先订阅这一事件;
观察者模式中需要控制的是响应时间以及广播链的复杂程度;
所谓响应时间是指所有订阅者对事件的响应时间,如果时间过长,那么肯定会影响发布者所在系统的性能;此时可以使用异步编程的方法;
广播链复杂程度是指,订阅者本身也是发布者,这样就相当于A发布事件E1,之后B做出对E1的响应,但是该响应作为E2,又得到了C的响应。如此一来,系统的交互就会变得很复杂,应当通过巧妙的设计避免事件的多次转发;
实现
体现的面向对象程序设计原则
单一职责原则:Subject与Observer各司其职,Subject并没有直接调用Observer的方法,而是调用统一的update方法;
依赖倒置原则:这体现在Observer的设计上;
里氏替换原则:并无体现;
接口隔离原则:并无体现;
迪米特原则:Observer将event的响应封装在update函数里,使得Subject无需指导Observer采取行动;
开闭原则:很明显,Subject和Observer都是极易扩展的;
关注个人微信公众号:落花流水存心阁,不仅能免费获得相关项目的源码,还可以扩展思维,启迪智慧哦~
后台回复:设计模式。获得项目源码~(如果从聚宝盆里获得资源后便狠心离去,那么聚宝盆将因难过而沉睡过去,无法为您提供宝贝了。。。除非唤醒它!)
如果觉得文章写的不错,也可以小小地打赏一下嘛~
也期待合作,“码”上改变~
微信账号 | 支付宝账号 |
---|---|
![]() | ![]() |