设计模式:observer模式
2024-09-04 04:40:53
目标:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
例子:
class Observer //观察者
{
public:
virtual void upadte() = 0; //接受通知
}; class Manager // 管理者
{
public:
virtual void registerObserver(Observer* o) = 0; //注册观察者
virtual void notify() = 0; //通知所有的观察者
};
class ManagerImpl: public Manager
{
vector<Observer*> v;
public:
void registerObserver(Observer* o)
{
v.push_back(o);
} void notify()
{
for(int i=0; i<v.size(); i++)
{
v[i]->upadte();
}
}
}; class FirstObserver: public Observer
{
public:
void upadte()
{
cout << "FirstObserver::upadte()" << endl;
}
}; class SecondObserver: public Observer
{
public:
void upadte()
{
cout << "SecondObserver::upadte()" << endl;
}
};
int main()
{
FirstObserver* f = new FirstObserver();
SecondObserver* s = new SecondObserver();
ManagerImpl* m = new ManagerImpl();
m->registerObserver(f);
m->registerObserver(s);
m->notify(); return 0;
}
最新文章
- react.js 生命周期componentDidUpdate的另类用法:防止页面过渡刷新
- Redis学习-基础环境介绍(二)
- 孙鑫MFC学习笔记5:文本显示
- [Linux 维护]收集centos系统性能指标
- Activity 与 Service 之间的消息传递
- 如何在Apache中建立一个新端口
- zend studio 13 curl 请求本机地址 无法跟踪调试的问题解决方案。。。(chrome等浏览器调试原理相同)
- nodejs前端自动化构建
- HDU 1423 Greatest Common Increasing Subsequence
- 用ASP.NET创建网站
- JavaScript中事件
- 单点登录cas常见问题(十四) - ST和TGT的过期策略是什么?
- MySQL UPDATE 查询
- jarvisoj level5爬坑
- JAVA-Enum 枚举
- Springboot定时任务原理及如何动态创建定时任务
- react纯手写全选与取消全选
- kudu导入文件(基于impala)
- 【Atcoder ARC060F】最良表現 / Best Representation
- Java final finally finalize有什么不同