前言:Observer模式是对象行为型模式的一种,定义了对象间的一种一对多的依赖关系。当一个对象状态发生改变时,所有依赖与它的对象都得到通知并被自动更新。本文将讨论以下内容,详细文档请参照GOF出版的《设置模式》。
1、 动机
2、 适用性
3、 结构
4、 代码实现
一、 动机
许多图形用户界面工具箱将用户应用的界面表示与底下的应用数据分离。定义应用数据的类和负责界面表示的类可以各自独立的复用,当然他们也可以一起工作。一个表格对象和一个柱状图对象可以使用不同的表示形式描述同一个应用数据对象的信息,但它们相互不知道对方的存在。图1.1 及图1.2以不同的方式显示了同一份数据。
图1.1 文本框显示
图1.2 柱状图显示
二、 适用性
在以下任一情况下可以使用观察者模式:
a) 当一个抽象模型有两个方面,其中一个方面依赖于另一方面。将这两者封装在独立的对象中使它们可以各自独立的改变和复用。
b) 当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变。
c) 当一个对象必须通知其他对象,而它又不能假定其他对象是谁。换言之,你不希望这些对象是紧密耦合的。
三、 结构
图1.3 Observer结构图
其中:
Subject(目标):
a) 目标知道它的观察者。可以有任意多个观察者观察同一目标。
b) 提供注册和删除观察者对象的接口。
Observer(观察者):
为那些在目标发生改变时需获得通知的对象定义一个更新的接口。
ConcreteSubject(具体目标)
a) 将有关状态存入各ConcreteObserver对象
b) 当它的状态发生改变时,向它的各个观察者发出通告
ConcreteObserver(具体观察者)
a) 维护一个指向ConcreteSubject对象的应用。
b) 存储有关状态,这些状态应与目标的状态保持一致。
c) 实现Observer的更新接口以使自身状态与目标的状态保持一致。
四、 代码实现
(具体的代码可以到本人资源中下载)
Subject:
Observer: