zoukankan      html  css  js  c++  java
  • 观察者模式——三英雄战吕布

    观察者模式:

    被观察者:吕布

    观察者:张飞,关羽,刘备

    #include <iostream>
    #include <vector>
    #include <list>
    using namespace std;

    class SubjectPeople;
    class ObserverPeople
    {
    public:
    virtual void Action()=0;
    };

    class SubjectPeople
    {
    public:
    virtual void RegisterPeople(ObserverPeople* ob) = 0;
    virtual void RemovePeople(ObserverPeople* ob) = 0;
    virtual void NotifyPeople() = 0;
    };

    class LvBuSubject:public SubjectPeople
    {
    protected:
    list<ObserverPeople *> OP;

    public:
    void RegisterPeople(ObserverPeople* ob)
    {
    OP.push_back(ob);
    }

    void RemovePeople(ObserverPeople* ob)
    {
    list<ObserverPeople*>::iterator it = OP.begin();
    while (it!=OP.end())
    {
    if (*it==ob)
    {
    OP.remove(*it);
    return ;
    }
    it++;
    }
    }

    void NotifyPeople()
    {
    list<ObserverPeople*>::iterator it = OP.begin();
    while (it!=OP.end())
    {
    (*it)->Action();
    it++;
    }
    }

    };


    class GuanYuOberver:public ObserverPeople
    {
    public:
    GuanYuOberver(SubjectPeople*op):sp(*op)
    {
    sp.RegisterPeople(this);
    }

    public:
    void Action()
    {
    cout<<"关羽给吕布一刀"<<endl;
    }

    protected:
    SubjectPeople& sp;
    };

    class ZhangFeiOberver:public ObserverPeople
    {
    public:
    ZhangFeiOberver(SubjectPeople*op):sp(*op)
    {
    sp.RegisterPeople(this);
    }

    public:
    void Action()
    {
    cout<<"张飞给吕布一杖"<<endl;
    }

    protected:
    SubjectPeople& sp;
    };

    class LiuBeiOberver:public ObserverPeople
    {
    public:
    LiuBeiOberver(SubjectPeople*p):sp(*p)
    {
    sp.RegisterPeople(this);
    }

    public:
    void Action()
    {
    cout<<"刘备给吕布一刀"<<endl;
    }

    protected:
    SubjectPeople& sp;
    };



    int main()
    {
    LvBuSubject lvb;
    GuanYuOberver gy(&lvb);
    LiuBeiOberver liub(&lvb);
    ZhangFeiOberver zf(&lvb);

    lvb.NotifyPeople();
    return 0;
    }



  • 相关阅读:
    Python流程控制
    Python 迭代器和列表解析
    Python 文件对象
    TF-IDF介绍
    hexo博客更换主题
    学习笔记—MapReduce
    Mac下Anaconda的安装和使用
    Flume的介绍和简单操作
    hexo+github搭建个人博客
    Hbase的安装和基本使用
  • 原文地址:https://www.cnblogs.com/BreakMind/p/2299162.html
Copyright © 2011-2022 走看看