欢迎来到天天文库
浏览记录
ID:40297789
大小:47.81 KB
页数:5页
时间:2019-07-30
《C++实现观察者模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、观察者模式是大学阶段应该掌握的几种重要的模式之一,它的用处广泛,而且其变种更能解决许多实际问题。下面详细的介绍一下。名称:观察者模式--Observer别名:Dependents,Publish-Subscribe意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。下面用一个教师-学生的例子说明观察者模式,其中学生是观察者,教师是被观察者,不过这个也适用于电器-开关的例子,可以把电器看作观察者,开关看作被观察者,当开关开始有动作的时候,观
2、察者接收到信息://-------------------------------------------------------------------// Subject.h 被观察对象//-------------------------------------------------------------------#ifndefSUBJECT_H#defineSUBJECT_H#include"Observer.h"classObserver;classSubject{
3、public: virtual~Subject(){} virtualvoidAttach(Observer*aObserver)=0; virtualvoidTalk()=0; virtualchar*GetContent()const=0; virtualvoidSetContent(char*aContent)=0;protected: Subject(){};};#endif//-------------------------------------------
4、-------------------------------// Teacher.h//--------------------------------------------------------------------------#ifndefTEACHER_H#defineTEACHER_H#include"Subject.h"#include#includeclassTeacher:publicSubject{public: Teacher(
5、); virtualvoidAttach(Observer*aObserver); virtualvoidTalk(); virtualchar*GetContent()const; virtualvoidSetContent(char*aContent);private: std::listobserverList; char*content;};#endif;//------------------------------------------
6、---------------------------// Teacher.cpp//---------------------------------------------------------------------#include"Teacher.h"Teacher::Teacher(){ content="现在开始上课";}voidTeacher::Attach(Observer*aObserver){ observerList.push_back(aObserver)
7、;}voidTeacher::SetContent(char*aContent){ content=aContent;}voidTeacher::Talk(){ std::list::iteratorstudents; for(students=observerList.begin();students!=observerList.end();++students) { ((Observer*)(*students))->Listen(this);
8、 }}char*Teacher::GetContent()const{ returncontent;}//--------------------------------------------------------------------------------// Observer.h 观察者//--------------------------------------------------------------------------------
此文档下载收益归作者所有