设计模式:Observer
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. 参考文章
- 《设计模式_可复用面向对象软件的基础》,
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可,转载请注明作者及原网址。
抱歉,暂停评论。