9.3.9 观察者模式
观察者模式定义了对象间的一对多依赖关系,让一个或多个观察者对象观察一个主题对象。当主题对象的状态发生变化时,系统能通知所有的依赖于此对象的观察者对象,从而使得观察者对象能够自动更新。
在观察者模式中,被观察的对象常常也被称为目标或主题(Subject
),依赖的对象被称为观察者(Observer
)。
程序示例
下面以一个简单的示例来示范观察者模式,程序先提供一个观察者接口。
上面Observer
接口是一个观察者接口,程序中所有观察者都应该实现该接口。在该接口的update
方法中包含了一个Observable
类型的参数,该参数代表被观察对象,也就是前面介绍的目标或主题。此处的Observable
是一个抽象基类,程序中被观察者应该继承该抽象基类。 Observable
类的代码如下。
该Observable
抽象类是所有被观察者的基类,它主要提供了registObserver()
方法用于注册一个新的观察者:并提供了一个removeObserver()
方法用于删除一个已注册的观察者;当具体被观察对象的状态发生改变时,具体被观察对象会调用notifyObservers()
方法来通知所有观察者。
下面提供一个具体的被观察者类:Product
,该产品有两个属性,它继承了Observable
抽象基类
正如程序中两行粗体字代码所示,当程序调用Product
对象的setName()
、 setPrice()
方法来改变Product
的name
、 price
成员变量时,这两个方法将自动触发Observable
基类的notifyObservers
方法。
接着主程序创建一个Product
对象(被观察的目标对象),然后向该被观察对象上注册两个观察者对象,当主程序调用Product
对象的sete
方法来改变该对象的状态时,注册在Product
对象上的两个观察者将被触发。主程序代码如下。
运行上面的程序,可以看到当Product
的成员变量值发生改变时,注册在该Product
上的Name Observer
和PriceObserver
将被触发。
纵观上面介绍的观察者模式,发现观察者模式通常包含如下4个角色。
原文链接: 9.3.9 观察者模式