定义:
定义对象之间的一种一对多的依赖关系,使得每当一个对象的状态发生变化时,其相关的依赖对象都可以得到通知并被自动更新。
模式主要用于多个不同的对象对一个对象的某个方法会做出不同的反应!
比如猫叫之后狗会叫老鼠会逃跑,这时候猫就是被观察者,老鼠和狗都是观察者。
角色:
- 抽象目标:这是被观察的对象(抽象)
- 这是核心,里面需要一个成员属性变量存储所有的观察者,需要定义add和remove观察者的方法,需要给出notify方法通知所有的观察者对象。
- 具体目标(具体的被观察者):猫继承抽象目标类,实现里面的方法,写出猫的反应,并且循环输出所有观察者的反应。
- 抽象观察者:接口,定义响应方法。
- 具体观察者:实现抽象观察者方法,重写响应方法。
- 客户端调用:先使用具体目标对象的add方法添加具体观察者对象,然后调用其notify方法通知观察者。
核心理解
观察者模式做的事情是这样的:
有这么一个场景,比如说一个对象的某个变化会造成其他类的不同的反应,比如说股票的涨跌和股民的状态就是一种动态的关联变化,观察者模式就是来描述这样的一个场景的!
具体是这样完成的:
根据依赖倒转原则,首先需要一个抽象的被观察的类,这个类拥有的成员属性变量是和它有关系的那些观察者对象,一般是有多个对象,如果这个属性是一个集合,那么需要定义两个接口方法,一个增加一个删除,最后还需要一个描述自身状态的方法。
具体的被观察者继承自抽象的被观察类, 这个类重写它的状态变化方法!注意这个方法需要遍历所有观察者对象的response方法
观察者同样也需要进行抽象,需要一个观察者接口类,这个类只有一个方法就是response()
具体的观察者实现这个接口,重写response方法!
客户端在调用时,需要把观察者添加到被观察者里,然后调用被观察者的状态变化方法,就会看到它所有的观察者对这个状态做出的不同的反应!
作者:靠谱杨,
更多日常分享尽在我的VX公众号:小杨的挨踢IT生活