观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。
常见的例子是关注各种公众号,收听广播什么的。被观察者只有一个,观察者可以有多个,当被观察者发生变化时会告诉观察者,观察者根据需要作出相应的动作。
其中关键的是被观察者类,在当中要定义如何添加、删除观察者(也可以搞一个管理器,用来管理这些操作,这样被观察者也可以是多个)。
观察者模式详解
优点
解除耦合,让耦合的双方都依赖于抽象,从而使得各自的变换都不会影响另一边的变换。
缺点
在应用观察者模式时需要考虑一下开发效率和运行效率的问题,程序中包括一个被观察者、多个观察者,开发、调试等内容会比较复杂,而且在Java中消息的通知一般是顺序执行,那么一个观察者卡顿,会影响整体的执行效率,在这种情况下,一般会采用异步实现。
在java.util包里面已经给我们现成的观察者接口和被观察者类,直接可以拿来用。还有一点要注意的是观察者模式和事件驱动模型的区别。