观察者模式例子

上传人:新** 文档编号:467069257 上传时间:2023-03-13 格式:DOCX 页数:5 大小:8.62KB
返回 下载 相关 举报
观察者模式例子_第1页
第1页 / 共5页
观察者模式例子_第2页
第2页 / 共5页
观察者模式例子_第3页
第3页 / 共5页
观察者模式例子_第4页
第4页 / 共5页
观察者模式例子_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

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

1、用观察者模式例子:多种数字钟的一致显示class Observer 定义一个抽象的观察者类 Observer接口 :public:virtual -Observer();virtual void Update (Subject* thechangedSubject) = 0;protected:Observer() ;/class Subject 定义抽象目标类 Subject接口:public:virtual -Subject();virtual void Attach(Observer*);virtual void Detach(Observer*);virtual void Notify

2、();protected:Subject () ;观察者指针列表Private:List *_observers;void Subject : Attach (Observer* o) 观察者注册方法_observers-Append (o);void Subject : Detach (Observer* o) 观察者注销方法_observers-Remove (o);void Subject : Notify () 通知方法ListIterator i (observers); 建立观察者循环列表实体for (i.First(); !i.IsDone(); i.Next() ) i.Cur

3、rentItem()-Update(this); 向歹U表中的所有观察者发修改消息/ClockTimer提供了一个接口用于取出单个的时间单位如小时,分钟和秒。class ClockTimer : public Subject 定义记忆和维护时间的具体目标类 public:ClockTimer();virtual int GetHour();virtual int GetMinute();virtual int GetSecond();void Tick(););void ClockTimer:Tick ()更新ClockTimer的内部状态的一些操作/Notify();)/class Digi

4、talClock: public Widget, public Observer /定义DigitalClock显示的数字钟类其中的Widget类提供操作界面方法pubic:DigitalClock(ClockTimer*);virtual DigitalClock();virtual void Update(Subject*); 重载 Update()virtual void Draw(); 重载Draw(),具体绘制数字钟的方法private:ClockTimer* _subject;);DigitalClock : DigitalClock (ClockTimer* s) _subjec

5、t = s;_subject-Attach(this);作为观察者,注册该数字钟到具体目标DigitalClock : -DigitalClock ()_subject-Detach(this);)void DigitalClock :Update (Subject* theChangedSubject)if (theChangedSubject = _subject) 确认发通知的目标是该时钟的目标 Draw();)void DigitalClock : Draw() int hour = _subject-GetHOur();从目标对象获得新时间值int minute = _subject

6、-GetMinute();/绘制数字钟)/class AnalogClock : public Widget, public Observer 用相同的方式定义不同的钟 public:AnalogClock(ClockTimer*)virtual void Update(Subject*);virtual void Draw(););这样,可以创建一个AnalogClock和一个Dig让alClock ,它们总是显示相同时间:ClockTimer* timer = new ClockTimer;AnalogClock* analogClock = new AnalogClock(timer);DigitalClock* digitalClock = new digitalClock(timer);

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

最新文档


当前位置:首页 > 办公文档 > 演讲稿/致辞

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