什么是观察者模式
观察者模式又叫发布/订阅模式,属于行为模式的一种,他的作用就是当一个对象的状态发生改变时能够自动通知其它关联对象。Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持同步状态。
观察者模式中的角色
Subject(被观察者):
维护观察者对象列表,当被观察者对象发生改变时需要通知队列中所有观察者对象。
被观察者具体实现:包含一些基本的属性状态及其他操作。
Observer(观察者):接口或者抽象类,当被观察者状态发生变化时,Observer对象将通过一个回调函数得到通知。
观察者具体实现:得到通知后将完成一些具体的业务逻辑处理。
观察者模式实现
1:可以使用java内置的Observable,Observer实现观察者模式
内置的观察者模式已经在jdk9中废除,原因是
子类不能序列化,线程不安全。
2:可以自定义实现
观察者模式的应用场景
一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。
侦听/监视某个对象的状态变化。
观察者模式优缺点
优点:被观察者和观察者是松耦合关系
缺点:观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。
如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。