美文网首页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();
}





相关文章

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 设计模式02-观察者者设计模式

    [toc] 设计模式02-观察者者设计模式 主要来源Head First设计模式(书)观察者设计模式是JDK中使用...

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • RxJava设计模式与原理

    标准观察者设计模式 RxJava是一种特殊的观察者模式,首先我们先来看标准的观察者设计模式。在标准观察者模式中,存...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • Guava源码分析——EventBus

    EventBus的设计理念是基于观察者模式的,可以参考设计模式(1)—观察者模式先来了解该设计模式。 1、程序示例...

  • 设计模式之观察者模式

    设计模式之观察者模式 本篇是设计模式系列博客的第四篇,本篇主要学习设计模式中的第二个行为型模式---观察者模式。 ...

  • PHP设计模式之观察者模式

    PHP设计模式之观察者模式

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

网友评论

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

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