案例分析:设计模式与代码的结构特性
模式存在的意义 现实生活中的例子 在现实世界中,很多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或多个其他对象的行为也发生改变。 例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;还有,当我们开车到交叉路口时,遇到红灯会停,遇到绿灯会行。像这样的例子还有很多,比如股票价格与股民的联系、微信公众号与微信用户、气象局的天气预报与听众、小偷与警察等等。 在软件世界也是这样,例如,Excel 中的数据与折线图、饼状图、柱状图之间的关系;MVC 模式中的模型与视图的关系;事件模型中的事件源与事件处理者。 所有这些,如果用观察者模式来实现就非常方便。 观察者模式的动机 对于上述现实中存在的问题,观察者模式建立起一种对象与对象之间的依赖关系,当一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。 在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展,这就是观察者模式的模式动机。 观察者模式的定义与结构 模式的定义 观察者(Observer)模式是指多个对象间存在 一对多的依赖关系 ,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 因此这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。