zoukankan      html  css  js  c++  java
  • C++设计模式之观察者模式

    观察者模式思想:
    第一:首先你有个需要被事件通知的类;在这个类中你需要添加当观察者通知事件到来时响应的Update消息,和定义个观察者类指针用来传递观察者想要传递的消息(想加则加);
    第二:观察者中你可以设置一个类对象容器,函数方法有2个,一个是添加对象到容器的方法和遍历容器中的对象,激活对象的Update()的消息;
    此理解是本人所想,不对的可以纠正..

    #include <iostream>
    #include <string>
    #include <vector>

    class Secretary;


    //lock Stock's stuff职工
    class StockObserver
    {
    private:
    std::string name;
    Secretary* sub;
    public:
    StockObserver(std::string strname,Secretary* strsub)
    {
    name=strname;
    sub=strsub;
    }
    void Update();
    };

    void StockObserver::Update()
    {
    std::cout<<":"<<sub->action<<"Don't play the TV"<<std::endl;
    }


    //秘书类(主题对象,通知者)----观察者
    class Secretary
    {
    private:
    std::vector<StockObserver> observers;//同事类对象容器
    public:
    std::string action; //给观察者传递的的消息

    void Add(StockObserver ob) //给对象容器添加你要通知的对象
    {
    observers.push_back(ob);
    }

    void Notify()
    {
    std::vector<StockObserver>::iterator p=observers.begin();
    //循环同志对象update
    while(p!=observers.end())
    {
    (*p).Update();
    p++;
    }

    }
    };



    int main() {
    Secretary *p = new Secretary(); //Creat 通知者

    // 观察者
    StockObserver* player_one = new StockObserver("小李", p);
    StockObserver* player_two = new StockObserver("小王", p);

    //jion 同志队列
    p->Add(*player_one);
    p->Add(*player_two);
    // 事件
    p->action="老板来了(set notice text)";
    //通知
    p->Notify();
    return 0;
    }
  • 相关阅读:
    【以前的空间】poj 2288 Islands and Bridges
    【以前的空间】网络流合集
    【以前的空间】 单调队列系列
    【以前的空间】几道平衡树
    【以前的空间】vijos 1720 阿狸的打字机
    对拍程序
    【Ubuntu】编写一个c语言代码
    用Matlab对数据进行线性拟合算法
    Oracle视图传递参数
    oracle decode的用法
  • 原文地址:https://www.cnblogs.com/xuaidongstdudyrecording/p/6013784.html
Copyright © 2011-2022 走看看