观察者模式:一个类的状态发生变化,通知其他类变化。
C++代码:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<queue>
#include<Windows.h>
#include<list>
using namespace std;
class Hero {
public :
virtual void update() = 0;
};
class HeroA : public Hero {
public :
HeroA() {
cout << "英雄A正在打BOSS" << endl;
}
void update() {
cout<<"英雄A停止打BOSS,开始抢装备"<<endl;
}
};
class HeroB :public Hero {
public:
HeroB() {
cout << "英雄B正在打BOSS" << endl;
}
void update() {
cout << "英雄B停止打BOSS,开始抢装备" << endl;
}
};
class HeroC :public Hero {
public:
HeroC() {
cout << "英雄C正在打BOSS" << endl;
}
void update() {
cout << "英雄C停止打BOSS,开始抢装备" << endl;
}
};
class AbstractObject {
public:
virtual void addHero(Hero* hero) = 0;
virtual void deleteHero(Hero* her0) = 0;
virtual void notify() = 0;
};
class Object : public AbstractObject {
private :
list<Hero*> l;
public:
virtual void addHero(Hero* hero) {
l.push_back(hero);
}
virtual void deleteHero(Hero* hero) {
l.remove(hero);
}
virtual void notify() {
for (list<Hero*>::iterator it = l.begin(); it != l.end();it++) {
(*it)->update();
}
}
};
void test() {
Hero* h1 = new HeroA();
Hero* h2 = new HeroB();
Hero* h3 = new HeroC();
cout<<"================================="<<endl;
AbstractObject* a = new Object();
a->addHero(h1);
a->addHero(h2);
a->addHero(h3);
cout<<"================================="<<endl;
a->deleteHero(h3);
cout<<"================================="<<endl;
a->notify();
}
int main() {
test();
return 0;
}