《设计模式21》-观察者模式

上传人:s9****2 文档编号:569788345 上传时间:2024-07-31 格式:PPT 页数:11 大小:354KB
返回 下载 相关 举报
《设计模式21》-观察者模式_第1页
第1页 / 共11页
《设计模式21》-观察者模式_第2页
第2页 / 共11页
《设计模式21》-观察者模式_第3页
第3页 / 共11页
《设计模式21》-观察者模式_第4页
第4页 / 共11页
《设计模式21》-观察者模式_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《《设计模式21》-观察者模式》由会员分享,可在线阅读,更多相关《《设计模式21》-观察者模式(11页珍藏版)》请在金锄头文库上搜索。

1、4.观察者模式(Observer Pattern)v又名:订阅-发布模式v例: 一个时钟模型,当时间改变时,通知各显示界面,如以数字形式显示,或以表盘形式显示。 观察者模式意图v多个对象间是一种一对多的关系;v当一个对象的状态改变时,所有依赖于它的对象都将得到通知,并自动更新;观察者模式结构观察者模式变体观察者模式效果v目标与观察者间解耦(只在抽象层耦合)v支持广播通信v不足:更新可能出现意外观察者模式的实现问题v目标与观察者间的关联管理可直接关联,也可将关联关系存入一个Map表中目标可以多个。即二者为多对多关系。v更新的触发例子代码class Subject;class Observerpu

2、blic: virtual Observer()(); virtual void Update(Subject * theChangedSubject) = 0;;class Subject public: Subject( ); virtual Subject( ); virtual void Atach(Observer * obj ) observers-Append(obj); virtual void Detach(Observer * obj) observers-Remove(obj); virtual void Notify() ListIterator i(observers

3、); for( i.First(); !i.IsDone();i.Next() i.CurrentItem()-Update(this); private: List * observers; ;/具体的目标类具体的目标类ClockTimerclass ClockTimer:public Subjectpublic: ClockTimer( ); virtual int GetHour(); virtual int GetMinute(); virtual int GetSecond(); void Tick() /记录当前时间记录当前时间 Notify();(); ;/具体的观察者类具体的观

4、察者类DigitalClockclass DigitalClock:public Observer public: DigitalClock(ClockTiemr * theSubject) subject = theSubject; subject-Attach(this); virtual DigitalClock()() subject-Detach(this); virtual void Update(Subject * theChangedSubject) if(theChangedSubject = subject) Draw(); virtual void Draw() int h= subject-GetHour(); int m = subject-GetMinute(); int s = subject-GetSecond(); /绘制时钟,略绘制时钟,略 private: ClockTimer * subject;;客户代码:客户代码:ClockTimer * timer = new ClockTimer;AnalogClock * analogClock = new AnalogClock(timer););DigitalClock * digitalClock = new DigitalClock(timer););

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号