观察者模式:建立与一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的对象成为观察目标,而被通知的对象称为观察者。一个观察目标对应多个观察者
//抽象的英雄 观察者
class AbstractHero{
public:
virtual void Update() = 0;
};
class HeroA : public AbstractHero{
public:
HeroA(){
cout << "英雄A正在打BOSS" <<endl;
}
virtual void Update(){
cout << "英雄A停止打BOSS" <<endl;
}
};
class HeroB : public AbstractHero{
public:
HeroB(){
cout << "英雄B正在打BOSS" <<endl;
}
virtual void Update(){
cout << "英雄B停止打BOSS" <<endl;
}
};
class HeroC : public AbstractHero{
public:
HeroC(){
cout << "英雄C正在打BOSS" <<endl;
}
virtual void Update(){
cout << "英雄C停止打BOSS" <<endl;
}
};
//抽象的boss 观察目标
class AbstractBoss{
public:
virtual void addHero(AbstractHero* hero) = 0;
virtual void deleteHero(AbstractHero* hero) = 0;
virtual void notify() = 0;
};
class BossA : public AbstractBoss{
public:
virtual void addHero(AbstractHero* hero){
pHeroList.push_back(hero);
}
virtual void deleteHero(AbstractHero* hero){
pHeroList.remove(hero);
}
virtual void notify(){
for(list<AbstractHero*>::iterator iter = pHeroList.begin(); iter != pHeroList.end(); iter++){
(*iter)->Update();
}
}
public:
list<AbstractHero*> pHeroList;
};
int main(){
AbstractHero* heroa = new HeroA;
AbstractHero* herob = new HeroB;
AbstractHero* heroc = new HeroC;
AbstractBoss* bossa = new BossA;
bossa->addHero(heroa);
bossa->addHero(herob);
bossa->addHero(heroc);
bossa->deleteHero(herob);
bossa->notify();
delete heroa;
delete herob;
delete heroc;
delete bossa;
return 0;
}