设计模式学习笔记之十六observer观察者模式_第1页
设计模式学习笔记之十六observer观察者模式_第2页
设计模式学习笔记之十六observer观察者模式_第3页
设计模式学习笔记之十六observer观察者模式_第4页
设计模式学习笔记之十六observer观察者模式_第5页
已阅读5页,还剩2页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论