目标:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新

例子:

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;
}

最新文章

  1. react.js 生命周期componentDidUpdate的另类用法:防止页面过渡刷新
  2. Redis学习-基础环境介绍(二)
  3. 孙鑫MFC学习笔记5:文本显示
  4. [Linux 维护]收集centos系统性能指标
  5. Activity 与 Service 之间的消息传递
  6. 如何在Apache中建立一个新端口
  7. zend studio 13 curl 请求本机地址 无法跟踪调试的问题解决方案。。。(chrome等浏览器调试原理相同)
  8. nodejs前端自动化构建
  9. HDU 1423 Greatest Common Increasing Subsequence
  10. 用ASP.NET创建网站
  11. JavaScript中事件
  12. 单点登录cas常见问题(十四) - ST和TGT的过期策略是什么?
  13. MySQL UPDATE 查询
  14. jarvisoj level5爬坑
  15. JAVA-Enum 枚举
  16. Springboot定时任务原理及如何动态创建定时任务
  17. react纯手写全选与取消全选
  18. kudu导入文件(基于impala)
  19. 【Atcoder ARC060F】最良表現 / Best Representation
  20. Java final finally finalize有什么不同

热门文章

  1. 008.OpenShift Metric应用
  2. Shiro密码重试次数限制
  3. Java类、实例初始化的顺序
  4. Linux安装Redis 6.0.5 ./install_server.sh报错
  5. 入门大数据---Hadoop是什么?
  6. 实战笔记丨JDBC问题定位指南
  7. Java工具类——日期相关的类
  8. dart快速入门教程 (7.2)
  9. git和github入门指南(3.1)
  10. 开发中如何让本地host和代理共存?