版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、设计模式 C+学习笔记之十六(Observer 观察者模式)16.1.解释概念:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。main(),IObservable,被观察者接口CHanFeiZiObservable,被观察者IObserver,观察者接口CLiSiObserver,观察者CZhouSiObserver 观察者说明:将观察者到被观察者身边,的每一个举动都会通知给观察者,如或。注意:最多允许一个对象既是观察者也是被观察者。就像数据库中的触发器一样,成为一个复杂的链就很难了。观察者类似于委托的处理方式。/IObservable
2、.h#pragma once #include IObserver.h #include using std:string;class IObservablepublic:IObservable(void)virtual IObservable(void)virtual void AddObserver(IObserver *pObserver) = 0; virtual void DeleteObserver(IObserver *pObserver) = 0; virtual void NotifyObservers(string context) = 0;/HanFeiziObserva
3、ble.h#pragma once#include iobservable.h #include IObserver.h #include using std:vector;class CHanFeiziObservable : public IObservablepublic:CHanFeiziObservable(void);CHanFeiziObservable(void);void AddObserver(IObserver *pObserver); void DeleteObserver(IObserver *pObserver); void NotifyObservers(stri
4、ng context);void HaveBreakfast(); void HaveFun();private:vector m_observerList;typedef vector:const_iterator ObserverList_C_iterator;/HanFeiziObservable.cpp#include StdAfx.h#include HanFeiziObservable.h #include using std:string; using std:cout; using std:endl;CHanFeiziObservable:CHanFeiziObservable
5、(void)CHanFeiziObservable:CHanFeiziObservable(void)void CHanFeiziObservable:AddObserver( IObserver *pObserver )m_observerList.push_back(pObserver);void CHanFeiziObservable:DeleteObserver( IObserver *pObserver )ObserverList_C_iterator it = m_observerList.begin(); for (; it != m_observerList.end(); it
6、+)string name = (*it)-GetName();if (pare(pObserver-GetName() = 0)/找到了删除。void CHanFeiziObservable:NotifyObservers( string context )ObserverList_C_iterator it = m_observerList.begin(); for (; it != m_observerList.end(); it +)(*it)-Update(context);void CHanFeiziObservable:HaveBreakfast()cout :开始吃饭了. No
7、tifyObservers(在吃饭);void CHanFeiziObservable:HaveFun()cout :开始了. NotifyObservers(在);/IObserver.h#pragma once #include using std:string; class IObserverpublic:IObserver(string _name)this-m_name = _name;virtual IObserver(void)virtual void Update(string context) = 0;virtual string GetName() = 0;/为c+单独增加
8、的函数,用于删除时查找观察者。 protected:string m_name;/LiSiObserver.h#pragma once#include iobserver.h#include using std:string; class CLiSiObserver :public IObserverpublic:CLiSiObserver(void);CLiSiObserver(void);void Update(string context); string GetName();private:void ReportToQinShiHuang(string report);/LiSiObs
9、erver.cpp#include StdAfx.h #include LiSiObserver.h #include using std:cout;using std:endl; using std:string;CLiSiObserver:CLiSiObserver(void) : IObserver(CLiSiObserver:CLiSiObserver(void)void CLiSiObserver:Update( string context )cout 活动,开始向汇报了. ReportToQinShiHuang(context);cout :汇报完毕,秦赏给他两个萝卜吃吃. en
10、dl;void CLiSiObserver:ReportToQinShiHuang( string report )cout report.c_str() endl;:,秦!string CLiSiObserver:GetName()return m_name;/ZhouSiObserver.h#pragma once#include iobserver.h#include using std:string;class CZhouSiObserver : public IObserverpublic:CZhouSiObserver(void);CZhouSiObserver(void); vo
11、id Update(string context); string GetName();private:void Cry(string report);/ZhouSiObserver.cpp#include StdAfx.h#include ZhouSiObserver.h #include using std:cout; using std:endl; using std:string;CZhouSiObserver:CZhouSiObserver(void) : IObserver(CZhouSiObserver:CZhouSiObserver(void)void CZhouSiObser
12、ver:Update( string context )cout 活动,自己也开始活动了. Cry(context);cout :真真的哭列了. endl;void CZhouSiObserver:Cry( string report )cout :为因 report.c_str() , 所以我悲伤呀! endl;string CZhouSiObserver:GetName()return m_name;/ Observer.cpp #include stdafx.h#include HanFeiZi.h#include LiSi.h#include HanFeiZiNew.h #includ
13、e HanFeiziObservable.h #include LiSiObserver.h #include ZhouSiObserver.h #include using std:cout; using std:endl;using std:string;void D()/IHanFeiZi.h, HanFeiZiNew.h, ILiSi.h, LiSi.h/ cout -用新的方法试试 endl;/CHanFeiZiNew hanfeizi;/hanfeizi.HaveBreakfast();/hanfeizi.HaveFun();void DNew()/IObservable.h, HanfeiziObservable.h, IObserver.h, LiSiObserver.h cout -用更新的方法再试试 AddObservpHanFeiZi-AddObservLiSi);ZhouSi);pHanFeiZi-HaveBreakfast();delete pLiSi; pLiSi = NULL;delete pHanFeiZi;pHanFeiZi = NULL;_tmain(argc, _TCHA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年乡村医生定期考核真题试卷及答案(四)
- Unit 4 Changing and Growing 词句+重难点+语法(学生版)-仁爱科普版(2024)八上
- 意识障碍患者的护理职业素养
- 医学26年:消化系统疾病心理干预 查房课件
- 【完整版】材料选用优化建议
- 工地危险化学品管理制度
- 城镇污水处理厂工程质量验收规范
- 【完整版】热力管道施工方案
- 宫腔镜手术快速康复护理路径
- 2026年机关事业单位工人技师考评(公共基础知识)综合练习题及答案
- 即兴表演神经机制-洞察及研究
- 处方审核培训课件
- -视觉质量评价
- 绿化部门油品管理制度
- 京东商品流程管理制度
- 2025年江苏省常州市中考二模英语试题
- 部队文职协议班合同
- 客运驾驶员安全培训课件
- 人工智能技术在职业技能提升中的心得体会
- 地理八年级下册《台湾省的地理环境与经济发展》课件
- GB/T 44755-2024低压高强紫外线灯
评论
0/150
提交评论