观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
#include <iostream>
#include <list>
using namespace std;
// 抽象英雄类(观察者)
class AbstractHero
{
public:
virtual void update() = 0;
};
// 具体观察者(盖伦)
class HeroGailun : public AbstractHero
{
public:
HeroGailun()
{
cout << "盖伦正在撸男爵..." << endl;
}
void update()
{
cout << "盖伦撸完大龙,回家补给..." << endl;
}
};
// 具体观察者(赵信)
class HeroZhaoXin : public AbstractHero
{
public:
HeroZhaoXin()
{
cout << "赵信正在撸男爵..." << endl;
}
void update()
{
cout << "赵信撸完大龙,回家补给..." << endl;
}
};
// 抽象观察目标类(被观察者)
class AbstractBoss
{
public:
virtual void add_hero(AbstractHero* hero) = 0; // 添加观察者
virtual void delele_hero(AbstractHero* hero) = 0; // 删除观察者
virtual void notify() = 0; // 通知所有观察者
};
// 具体的目标(男爵)
class Baron : public AbstractBoss
{
public:
void add_hero(AbstractHero* hero)
{
pHeroList.push_back(hero);
}
void delele_hero(AbstractHero* hero)
{
pHeroList.remove(hero);
}
void notify()
{
for (list<AbstractHero*>::iterator it = pHeroList.begin(); it != pHeroList.end(); ++it)
{
(*it)->update();
}
}
private:
// 观察者队列
list<AbstractHero*> pHeroList;
};
void test_01()
{
//创建观察者
AbstractHero* gailun = new HeroGailun;
AbstractHero* zhaoxin = new HeroZhaoXin;
//创建观察目标
AbstractBoss* baron = new Baron;
baron->add_hero(gailun);
baron->add_hero(zhaoxin);
cout << "gailun阵亡..." << endl;
baron->delele_hero(gailun);
cout << "男爵死了...通知其他英雄回家补给..." << endl;
baron->notify();
}
int main()
{
test_01();
system("pause");
return 0;
}