c++设计模式之观察者模式
2024-10-15 00:20:47
概念:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
通常讲就是被观察者向左右观察对象通知其状态的改变,以使得观察者进行相应信息的更新。
代码如下
#include class ObjectUser;//被观察者对象
class Observer
{
protected:
ObjectUser *m_ObjectUser; public:
virtual void NotifyMessage() = ;
}; class Observer1:public Observer
{
Observer1(ObjectUser *g_ObjectUser)
{
m_ObjectUser = g_ObjectUser;
}
public:
virtual void NotifyMessage()
{
int cmd = m_ObjectUser->command;
cout << "被观察者命令改变为"<<cmd;
}
}; class Observer2:public Observer
{
Observer2(ObjectUser *g_ObjectUser)
{
m_ObjectUser = g_ObjectUser;
}
public:
virtual void NotifyMessage()
{
cout << "被观察者通知消息给我说它发生了改变,要我更新";
//.........
}
}; class ObjectUser
{
friend class Observer;
protected:
int command; std::vector<Observer*> ObserverList; public:
void AddObserver(Observer* pUser)
{
ObserverList.push_back(pUser);
} void NotifyMsg()
{
for (int i = ;i<ObserverList.size();i++ )
{
ObserverList[i]->NotifyMessage();
}
}
}; void main()
{
ObjectUser *OUser = new ObjectUser();
Observer pOb1 = new Observer1(OUser);
Observer pOb2 = new Observer2(OUser); OUser->AddObserver(pOb1);
OUser->AddObserver(pOb2);
OUser->NotifyMsg(); }
最新文章
- SQLite学习笔记(六)&;&;共享缓存
- LeetCode&mdash;&mdash;Balanced Binary Tree(判断是否平衡二叉树)
- 从零开始学iPhone开发(3)——视图及控制器的使用
- php部分--session的三种用法
- Windows 2008 R2 配置 DNS 实现二级域名
- 在Android软按键中添加Menu键
- 3D开发的基本知识
- 使用ffmpeg实现转码样例(代码实现)
- mysqldump 的方式来搭建master-->;slave 的复制架构
- 3D模型制作
- swift 用协议实现代理传值功能
- QModelIndex有internalPointer()函数,可以存任何数据,另有QAbstractItemModel::createIndex来创造节点
- 为网站添加IE6升级提示
- jquery 元素控制(附加元素/其他内容)引进和应用
- Sikuli:创新的图形化编程技术
- Caffe学习系列(四)之--训练自己的模型
- js中的caller属性和callee属性
- Django ORM queryset object 解释(子查询和join连表查询的结果)
- 【ABP框架系列学习】N层架构(3)
- while循环、格式化输出、运算符和编码初识
热门文章
- JAVA采用JDBC连接操作数据库详解
- shell中的case表达式
- NoSql中的B-tree、B+tree和LSM-tree
- 函数:内嵌函数和闭包 - 零基础入门学习Python020
- IE10-IE11在NET4.0下出现“__doPostBack未定义”解决方案
- [TYVJ] P1027 木瓜地
- 可以让javascript加快的脚本(收藏了)
- 配置wamp环境使得在命令行下也能执行socket扩展
- VS2010的openssl源码编译方法
- 《Programming WPF》翻译 第7章 2.图形