学习笔记:观察者模式
模式简介
:属于行为型模式,存在一对多的关系时使用。
为什么用
:当一个对象发生一些变化时,需要通知与变化相关的所有类。
怎么样用
:直接在对象中调用其他类的变化相关的方法。
注意事项
:其他类也有要通知的类时,别写成死循环了。
实际举例
:地图通知用户消息。
#include <iostream>
#include <vector>
using namespace std;
//人物
class Person {
private:
string name;
public:
friend class Observer;
Person(){}
Person(string name) {
this->name = name;
}
};
//人物成为观察者
class Observer {
private:
Person *person;
public:
Observer(Person *person) {
this->person = person;
}
void update(string meesgae) {
cout << "客户端[" << person->name << "]" << ": " << meesgae<<"\n";
}
};
//观察的对象
class Map {
private:
vector<Observer*>v;
public:
void addObserver(Observer *observer) {
v.push_back(observer);
}
void refreshBoss() {
cout << "游戏服务器: Boss加入战场\n";
notifyAllObserver();
}
void notifyAllObserver() {
int size = v.size();
for (int i = 0; i < size; ++i) {
v[i]->update("地图Boss已经刷新,勇士可以前往击杀");
}
}
};
int main(){
//需要观察对象
Map map;
//生成观察者
Observer observer1(new Person("moota"));
Observer observer2(new Person("vicky"));
Observer observer3(new Person("quest"));
//加入观察者
map.addObserver(&observer1);
map.addObserver(&observer2);
map.addObserver(&observer3);
//变化
map.refreshBoss();
return 0;
}