• 观察者模式——三英雄战吕布


    观察者模式:

    被观察者:吕布

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

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



  • 相关阅读:
    使用Vue快速开发单页应用
    轻松入门React和Webpack
    使用Redux管理你的React应用
    深入理解 react-router 路由系统
    webpack学习之路
    webpack编译流程漫谈
    HTML5无刷新修改Url,history pushState/replaceState
    gulp的流与执行顺序
    RequireJS对文件合并与压缩实现方法
    RequireJS模块化后JS压缩合并
  • 原文地址:https://www.cnblogs.com/BreakMind/p/2299162.html
Copyright © 2020-2023  润新知