观察者模式
当对象间存在一对多的关系时,可以使用观察者模式。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
不使用观察者模式可能出现的问题:
(1)当一个对象的数据更新时需要通知其他对象,但这个对象需要和被通知的那些对象形成紧耦合。观察者模式可以避免紧耦合
(2)当一个对象的数据更新时,这个对象需要让其他对象也各自更新自己的数据,但这个对象需要知道具体有多少对象需要更新数据。观察者模式可以避免知道具体的对象数量。
Java/Spring的应用:
import java.util.Observable;
import org.springframework.context.ApplicationListener;
业务场景:
爱彼迎下订单订房之后,会发送微信消息、短信消息、邮件消息进行通知
生活场景:
拍卖行中,拍卖师观察当前最高竞拍价,并通知给其他其他竞价者
优点:
1、观察者和被观察者是抽象耦合的。
2、建立一套触发机制。
缺点:
1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。
2、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。
3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。