目录
[显示]

1.摘要

Observer模式定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。

2. 针对问题

有时一个对象状态的更改需要引发其他对象更新。最常见的情况便是在GUI编程中,对象中数据的改变需要反应到界面上。
例如一个table控件需要增加一行,传统方式是在table中创建一个新行,并为每个单元格赋值。但是这样做必然会将数据逻辑和界面逻辑耦合在一起,如果需要更新多个表格,那么这段代码就会重复出现多次。
Observer模式便是抽取了这种多个对象之间状态同步操作。

3. 介绍

定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。

4. 实现

Observer模式的静态图如下:

其中:
Subject维护一个Observer列表,Subject内部状态更新时通知列表中的Observer对象。
Observer声明Update接口,这个接口在Subject更新时被Subject调用,并保持Observer状态与Subject一致。

Observer模式的顺序图如下:

当Subject更新时它将通知各个Observer,Observer收到通知时可以查询Subject的状态,并同步自身状态。

实现Observer模式时要注意以下几点:
1、删除Observer时需要同时删除Subject列表中的引用。
2、可以在Attach方法中增加类型参数,以指定特定类型的更新。
3、在Subject和Observer直接的关系特别复杂时,可以使用Mediator模式,在两者之间增加中介类,静态图如下:

ChangeManager类将维护Observer列表和更新Subject的操作提取到自身中,解除了Observer和Subject的耦合。

5. 特点

1、解除Subject和Observer的紧密耦合,Subject并不知道Observer的具体类型。
2、可实现Subject对Observer的广播通信。

6. 相关文章

设计模式总结

7. 参考文章

  1. 《设计模式_可复用面向对象软件的基础》,