观察者模式
什么是观察者模式?
观察者模式中存在着“目标”和“观察者”两方的对象,目标有方法可以添加、移除观察者,而观察者会有特定的接口。观察者会把自己注册到目标中,当目标发生变化时,会主动调用观察者的特定方法,将该变化通知到观察者,观察者根据情况作出处理。
观察者的示意图(图片来源于网络)
观察者模式的核心
观察者模式的核心是:目标需要提供添加和其它管理观察者的接口,观察者将自己注册到目标,当目标发生变化主动通过回调的方式将变化通知到观察者。
观察者模式的优点和缺点
优点
观察者模式在观察者和被观察者之间建立了抽象和耦合关系,被观察者维护一个观察者的列表,被观察者不需要了解观察者,只知道观察者的特定接口。
缺点
- 如果一个被观察者被注册了多个观察者对象,被观察者对象发生改变的时候会将该变化通知到所有的注册过的观察者,需要考虑效率。
- 虽然观察者模式可以随时使得观察者知道所观察的对象发生了变化,却不能知道该变化是怎么发生的。
发布订阅模式
什么是发布订阅模式
发布订阅模式和观察者模式很相似,观察者模式也可以看做是简单的发布订阅者模式,如将观察模式下的被观察者看做是发布者,将观察者模式下的观察者看做订阅者。
发布订阅者模式在发布者、订阅者之间引入了消息中介的角色,在发布订阅者模式中,发布者和订阅者都不知道对方的存在,订阅者将自己注册到消息中介管理,发布者将消息通知到消息中介,消息中介再将消息通知到特定的订阅者手上。
发布订阅模式的示意图(图片来源于网络)
发布订阅模式和观察者模式的区别
观察者模式是在被观察者和观察者之间建立耦合关系,为较强耦合关系,观察者和被观察者相互都知道对方的存在;在发布订阅者模式中,发布者和订阅者之间没有建立直接的联系,相互之间不需要知道对方的存在,为松散耦合关系。