您的位置:首页 > 其它

4.1 《硬啃设计模式》 第18章 同步更新的问题 - 观察者模式(Observer Pattern)

2013-11-08 11:00 465 查看
某程序以多种不同的形式展示相同的数据,展示的方式可能是表格、柱状图、饼图等。当数据发生变化时,所有的展示方式都需要同步更新。
你会怎样设计,来灵活应对展示方式的不确定性呢?


 

分析:
1.不管是怎样的数据展示方式,它们的数据源都是同样的一个。
2.数据发生变化时,数据源是首先知道的,它需要通知所有的数据展示。
3.数据源是必须“知道”数据展示的,否则无法通知它们,通常做法就是数据源保持各数据展示的引用,但这样就被“耦合”掉了,有什么办法可以“解耦”呢?

应用了观察者模式的设计:


 

说明:
1.Data是数据源,而各数据展示者需实现IObserver接口。
2.Data不需要显式地知道数据展示者,它只需要知道IObserver接口便可。
3.各数据展示者需要主动通过Data.Register()注册,让Data知道自己,而不需要Data知道自己时,可调用Data.Remove()。
4.Data发生数据变化需要通知各数据展示者时,只需要调用Notify()方法便可。

观察者模式类图:


 

说明:
1.Subject定义一个接口,如果谁想关注我,就需要实现这个接口,并且通过Register()方法来注册。
2.如果需要增加观察者者,只需要增加一个实现了IObserver接口的新类并注册到Subject就行了。
3.这样的设计,让主题和观察者实现了一定程度的“解耦”。

请看下一文……   作者:张传波创新工场创业课堂(敏捷课程)讲师软件研发管理资深顾问CMMI首席专家《火球——UML大战需求分析》作者《硬啃设计模式》作者www.umlonline.org创办人
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: