收藏 分销(赏)

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

上传人:二*** 文档编号:12819994 上传时间:2025-12-11 格式:PPT 页数:11 大小:169KB 下载积分:5 金币
下载 相关 举报
《设计模式21》-观察者模式.ppt_第1页
第1页 / 共11页
本文档共11页,全文阅读请下载到手机保存,查看更方便
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,4.观察者模式(Observer Pattern),又名:订阅-发布模式,例:,一个时钟模型,当时间改变时,通知各显示界面,如以数字形式显示,或以表盘形式显示。,观察者模式意图,多个对象间是一种一对多的关系;,当一个对象的状态改变时,所有依赖于它的对象都将得到通知,并自动更新;,观察者模式结构,观察者模式变体,观察者模式效果,目标与观察者间解耦(只在抽象层耦合),支持广播通信,不足:更新可能出现意外,观察者模式的实现问题,目标与观察者间的关联管理,可直接关联,也可将关联关系存入一个Map表中,目标可以多个。即二者为多对多关系。,更新的触发,例子代码,class Subject;,class Observer,public:,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);,for(i.First();!i.IsDone();i.Next(),i.CurrentItem()-Update(this);,private:List*observers;,;,/具体的目标类ClockTimer,class ClockTimer:public Subject,public:,ClockTimer();,virtual int GetHour();,virtual int GetMinute();,virtual int GetSecond();,void Tick(),/记录当前时间,Notify();,;,/具体的观察者类DigitalClock,class 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);,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 环境建筑 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服