美文网首页C++设计模式程序员
【C++设计模式】观察者模式

【C++设计模式】观察者模式

作者: 小鱼号的代码日记 | 来源:发表于2021-02-06 15:26 被阅读0次
    /*设计模式
     *  观察者模式用于建立对象与对象之间的依赖关系
     * 一个对象发生改变时将自动通知其他对象
     * 其他对象将相应做出反应
     * 在观察者模式中,发生改变的对象称为观察目标
     * 而被通知的对象成为观察者
     * 例子:
     * 几个英雄打boss
     * boss死了通知英雄停止攻击
    */
    
    #include<iostream>
    #include<list>
    using namespace std;
    
    //抽象的英雄  观察者
    class AbstractHero
    {
    public:
        virtual void Update() = 0;
    };
    
    class HeroA :public AbstractHero
    {
    public:
        HeroA()
        {
            cout << "heroA a attract boss" << endl;
        }
        virtual void Update()
        {
             cout << "heroA stand by" << endl;
        }
    };
    
    
    class HeroB :public AbstractHero
    {
    public:
        HeroB()
        {
            cout << "hero B a attract boss" << endl;
        }
        virtual void Update()
        {
             cout << "heroB stand by" << endl;
        }
    };
    
    
    class HeroC :public AbstractHero
    {
    public:
        HeroC()
        {
            cout << "hero C a attract boss" << endl;
        }
        virtual void Update()
        {
             cout << "hero C stand by" << endl;
        }
    };
    
    //boss 观察目标抽象
    class AbstractBoss
    {
    public:
        virtual void addHero(AbstractHero*) = 0; //添加观察者
        virtual void deleteHero(AbstractHero*) = 0; //删除观察者
        virtual void notify() = 0;//通知所有观察者
    };
    
    //boss 具体的观察目标
    class BOSS :public AbstractBoss
    {
    public:
        virtual void addHero(AbstractHero* hero)
        {
            m_pHeroList.push_back(hero);
        }
        virtual void deleteHero(AbstractHero*hero)
        {
            m_pHeroList.remove(hero);
        }
        virtual void notify()
        {
            for(list<AbstractHero*>::iterator it = m_pHeroList.begin();
                it != m_pHeroList.end();it++)
            {
                (*it)->Update();
            }
        }
    private:
        list<AbstractHero*> m_pHeroList;
    };
    
    void testObserve()
    {
        //创建观察者
        AbstractHero* pHeroA = new HeroA();
        AbstractHero* pHeroB = new HeroB();
        AbstractHero* pHeroC = new HeroC();
        //创建观察目标
        AbstractBoss* pBossA = new BOSS();
    
        pBossA->addHero(pHeroA);
        pBossA->addHero(pHeroB);
        pBossA->addHero(pHeroC);
    
        cout << "hero c is dead" << endl;
        pBossA->deleteHero(pHeroC);
    
        cout << "boss a is dead" << endl;
        pBossA->notify();
    }
    
    
    
    
    
    

    相关文章

      网友评论

        本文标题:【C++设计模式】观察者模式

        本文链接:https://www.haomeiwen.com/subject/dcdvtltx.html