observer

网上找的,不是自己写的

放上链接

blog.csdn.net/lcl_data/article/details/9208561

observer.cpp

#include <iostream>

#include <vector>

#include <string>

using namespace std;

class Secretary;

// 看股票的同事类(观察对象,观察者)

class StockObserver

{

public:

StockObserver(string strName, Secretary* strSub)

{ name = strName; sub = strSub; }

void Update();

private:

string name;

Secretary* sub;

};

// 秘书类(主题对象,通知者)

class Secretary

{

public:

string action;

void Add(StockObserver ob) {

observers.push_back(ob);

} void Remove(int addIndex) {

if(addIndex >=0 && addIndex < observers.size()) observers.erase(observers.begin() + addIndex); }

void Notify() {

vector<StockObserver>::iterator it;

for (it=observers.begin(); it!=observers.end(); ++it)

{ (*it).Update(); }

}


private:

vector<StockObserver>observers;

};

void StockObserver::Update()

{

cout << name << " : " << sub->action << ", begin to work" << endl;

}

int main()

{

// 创建通知者

Secretary* p = new Secretary();

// 观察者

StockObserver* s1 = new StockObserver("Lazy", p);

StockObserver* s2 = new StockObserver("SnowFire", p);

// 加入通知队列

p->Add(*s1);

p->Add(*s2);

// 事件

p->action = "The boss is coming...";

// 通知

p->Notify();

// 动态删除

p->Remove(0);

p->Notify();

return 0;

}

编译:make observer

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 订阅报纸的过程## 来考虑实际生活中订阅报纸的过程,这里简单总结了一下,订阅报纸的基本流程...
    七寸知架构阅读 4,725评论 5 57
  • 意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并自动更新。 结构 ...
    非空白阅读 513评论 0 1
  • 观察者模式Observer 背景 1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力。当对象...
    践行者阅读 1,652评论 0 4
  • 观察者模式很好理解,简单来说就是:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种...
    Josaber阅读 443评论 0 0
  • Observer 含义 定义对象之间的一对多依赖关系,以便当一个对象更改状态时,它的所有依赖关系将被自动通知和更新...
    kylesean阅读 1,262评论 0 1