观察者模式
用于建立一种对象与对象之前的依赖关系, 一个对象发生改变的时候将自动通知其他的对象,其他对象将相应做出反应。发生改变的对象称为观察目标, 被通知的对象称为观察者。
#include <iostream>
#include <list>
using namespace std;
// 抽象的英雄
class AbstractHero {
public:
virtual void update() = 0;
};
class HeroA : public AbstractHero {
public:
HeroA() {
cout << "英雄A正在撸boss" << endl;
}
void update() override {
cout << "英雄A停止撸" << endl;
}
};
class HeroB : public AbstractHero {
public:
HeroB() {
cout << "英雄B正在撸boss" << endl;
}
void update() override {
cout << "英雄B停止撸" << endl;
}
};
class HeroC : public AbstractHero {
public:
HeroC() {
cout << "英雄C正在撸boss" << endl;
}
void update() override {
cout << "英雄C停止撸" << endl;
}
};
// 观察目标抽象
class AbstractBoss {
public:
virtual void addHero(AbstractHero* hero) = 0;
virtual void deleteHero(AbstractHero* hero) = 0;
virtual void notify() = 0; //通知观察者
};
class BossA : public AbstractBoss {
public:
void addHero(AbstractHero* hero) override {
pHeroList.push_back(hero);
}
void deleteHero(AbstractHero* hero) override {
pHeroList.remove(hero); //删除指定的人
}
void notify() override {
for (auto i : pHeroList) {
i->update();
}
}
private:
list<AbstractHero*> pHeroList;
};
void test01() {
// 创建观察者
HeroA heroA;
HeroB heroB;
HeroC heroC;
// 创建被观察者
BossA boss;
// 添加观察者
boss.addHero(&heroA);
boss.addHero(&heroB);
boss.addHero(&heroC);
boss.notify();
cout << "heroC阵亡" << endl;
boss.deleteHero(&heroC);
boss.notify();
}
int main() {
test01();
return 0;
}