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创办人
你会怎样设计,来灵活应对展示方式的不确定性呢?
分析:
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创办人
相关文章推荐
- 设计模式-观察者模式(Observer Pattern)
- 2. 观察者模式(Observer pattern)
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)
- 设计模式-观察者模式(observer pattern)
- 观察者模式(Observer Pattern)
- Observer Pattern 观察者模式
- Net设计模式实例之观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)(三):使用java内置的支持实现HeadFirst气象站
- 设计模式--观察者模式【Observer Pattern】
- 设计模式学习总结-观察者模式(Observer Pattern)
- 观察者模式【Observer Pattern】
- 设计模式之观察者模式(Observer Pattern)
- 设计模式(二)The Observer Pattern 观察者模式
- 【CDP-云设计模式】第8章,3.工作观察者模式(Job Observer Pattern)
- Swift 04 观察者模式 Observer Pattern
- .NET设计模式:观察者模式(Observer Pattern)
- 设计模式之观察者模式(Observer Pattern)
- 观察者模式-Observer Pattern
- 观察者模式(Observer Pattern)