应用背景: 原始定时任务类编写了全部的定时任务代码,通过使用该模式进行拆分,可以使不同的定时任务拆分成不同的被观察者类,同时针对不同的任务类通过订阅不同的订阅者实现不同的清理工作。
观察者模式: 定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
示例:
定义的被订阅者类,里面使用一个集合用来装载所有的订阅者,同时编写对应的响应事件用来通知所有的订阅者来响应每个订阅者内部自身实现的逻辑
其中一个被订阅者的实现:
其中用于实现逻辑的方法内在finally代码块中来调用对应的响应方法
实现订阅者的接口:
这里实现了几种不同的接口 对于同样的订阅者内部可以实现相同订阅者不同方法的实现
其中一个实现:
观察者模式优缺点:
1、观察者模式实现了观察者和目标之间的抽象耦合
2、观察者模式实现了动态联动
3、观察者模式支持广播通信
**本质: 触发联动
何时选用:
■ 当一个抽象模型有两个方面,其中一个方面的操作依赖于另一个方面的状态变化,那么就可以选用观察者模式,将这两者封装成观察者和目标对象,当目标对象变化的时候,依赖于它的观察者对象也会发生相应的变化。这样就把抽象模型的这两个方面分离开了,使得它们可以独立地改变和复用。
■ 如果在更改一个对象的时候,需要同时连带改变其他的对象,而且不知道究竟应该有多少对象需要被连带改变,这种情况可以选用观察者模式,被更改的那一个对象很明显就相当于是目标对象,而需要连带修改的多个其他对象,就作为多个观察者对象了。
■ 当一个对象必须通知其他的对象,但是你又希望这个对象和其他被它通知的对象是松散耦合的。也就是说这个对象其实不想知道具体被通知的对象。这种情况可以选用观察者模式,这个对象就相当于是目标对象,而被它通知的对象就是观察者对象了。