前言:
在现实世界中,许多对象并不是独立存在的,其中的一个对象的行为发生变化可能会导致一个或者多个其他对象的行为发生变化。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;还有当我们开车到交叉路口时,遇到红灯会停,遇到绿灯会行。这样的例子还有很多,例如,股票价格与股民、微信公众号与微信用户、气象局的天气预报与听众、小偷与警察等。
在软件世界也是这样,例如,Excel 中的数据与折线图、饼状图、柱状图之间的关系;MVC 模式中的模型与视图的关系;事件模型中的事件源与事件处理者。所有这些,如果用观察者模式来实现就非常方便。
定义:
指多个对象之间存在的一对多的依赖关系,当一个对象的状态发生改变的时候,所有依赖于它的对象都得到通知并自动刷新。这种模式又被称作 发布-订阅模式,模型-视图模式。
模式的结构和实现
实现观察者模式时要注意具体目标对象和具体观察者对象之间不能直接调用。否则,将使两者之间紧密耦合起来,违背了面向对象的设计原则。
主要角色:
- 抽象主题(Subject)角色:也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加,删除观察者对象的方法,以及通知所有观察者的抽象方