设计模式之观察者模式(C++实现)
来源:互联网 发布:伦敦爱乐乐团知乎 编辑:程序博客网 时间:2024/06/04 20:10
观察者模式概念:定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。
特点:
1.观察者模式定义了对象之间一对多的关系。
2.主题(也就是可观察者)用一个共同的接口来更新观察者。
3.观察者和可观察者用松耦合的方式结合,可观察者不知道观察者的细节,只知道观察者实现了观察者接口
4.有多个观察者时,不可以依赖特点的通知次序。
/************************************************UpdateBase.h可观察者基类*************************************************************/#ifndef UPDATEBASE_H#define UPDATEBASE_H#include <vector>#include <iostream>using namespace std;class DatabaseBase;class UpdateBase{protected: vector<DatabaseBase*> updateVec;int value;public:virtual void addData(DatabaseBase*) = 0;virtual void deleteData(DatabaseBase*) = 0;virtual void setValue(int) = 0;virtual int getValue() = 0;virtual void notify() = 0;};#endif/**********************************************************Update.h可观察者子类*************************************************************/
#include "UpdateBase.h"#include "DatabaseBase.h"class Update :public UpdateBase{public:virtual void addData(DatabaseBase* v){updateVec.push_back(v);};virtual void deleteData(DatabaseBase* v){for(auto it = updateVec.begin();it!=updateVec.end();it++){if(*it == v){updateVec.erase(it);return;}}};virtual void setValue(int n){value = n;notify();};virtual int getValue(){return value;};virtual void notify(){for(auto it = updateVec.begin();it!=updateVec.end();it++){(*it)->handle_event();}};};
/************************************************DatabaseBase.h观察者类*************************************************************/
#ifndef DATABASEBASE_H#define DATABASEBASE_Hclass UpdateBase;class DatabaseBase{protected:UpdateBase * update;public:DatabaseBase(){};DatabaseBase(UpdateBase *v){update = v;};virtual void handle_event()=0;};#endif
/************************************************DatabaseA.h观察者子类*************************************************************/
#include "DatabaseBase.h"#include "UpdateBase.h"using namespace std;class DatabaseA : public DatabaseBase{public:DatabaseA(UpdateBase *v){update = v;}void handle_event(){cout<<"this value is "<<update->getValue()<<endl;};};
/************************************************DatabaseB.h观察者子类*************************************************************/
#include "DatabaseBase.h"#include "UpdateBase.h"using namespace std;class DatabaseB :public DatabaseBase{public:DatabaseB(UpdateBase *v){update = v;}void handle_event(){cout<<"this value is "<<update->getValue()<<endl;};};
/*****************************************************main.cpp实现文件*************************************************************/
#include "UpdateBase.h"#include "DatabaseBase.h"#include "DatabaseA.h"#include "DatabaseB.h"#include "Update.h"int main(){UpdateBase *update = new Update;DatabaseBase * datebaseA = new DatabaseA(update);DatabaseBase * datebaseB = new DatabaseB(update);update->addData(datebaseA);update->addData(datebaseB);update->setValue(100);getchar();return 0;};
- 设计模式之观察者模式(C++)
- 设计模式之观察者模式(c++)
- 设计模式之观察者模式(订阅模式),jquery实现
- 设计模式之观察者设计模式(C++实现)
- scala实现设计模式之观察者模式
- Java实现设计模式之观察者模式
- 设计模式之观察者模式(Python实现)
- 设计模式之观察者模式,C++实现(上部分)
- 设计模式之观察者模式,C++实现(下部分)
- JAVA设计模式 之 观察者模式(JDK内置实现)
- 设计模式之观察者模式(c++实现)
- 设计模式之观察者模式(C++实现)
- 设计模式--观察者模式(C++)
- 设计模式--观察者模式(C++)
- 设计模式--观察者模式(C++)
- 设计模式----观察者模式Observer(C++)
- 设计模式---观察者模式(C++)
- 设计模式-观察者模式(PHP实现)
- 红黑树(RB-tree)比AVL树的优势在哪?
- 对研发人员的全新认识
- The kernel object namespace and Win32, part 3
- log4j.properties
- [转载]谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
- 设计模式之观察者模式(C++实现)
- css3中的animation动画
- Node.js 应用程序的 5 条性能建议
- 关于云ERP系统常见的五个谬论
- window7系统的一体机不能调节亮度
- CentOS7之搭建lamp环境
- JSON详解
- CascadeCNN人脸检测学习笔记
- 仿QQ聊天程序