观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听同一个主题对象。这个主题对象在状态改变时,会通知所有的观察者对象,让它们自己能自动更新自己。
//观察者基类
class Observer
{
public:
//为多态基类声明一个虚析构函数
virtual ~Observer(){}
//执行方法
virtual void update() = 0;
};
//观察者A
class ObserverA: public Observer
{
void update() override
{
cout << "update A" << endl;
}
};
//观察者B
class ObserverB : public Observer
{
void update() override
{
cout << "update B" << endl;
}
};
//主题类
class Subject
{
public:
//添加观察者
void add(Observer *observer)
{
observers.push_back(observer);
}
//移除观察者
void remove(Observer *observer)
{
auto position = find(observers.begin(), observers.end(), observer);
observers.erase(position);
}
//触发事件,执行订阅方法
void notify() const
{
for (auto &i : observers)
{
i->update();
}
}
private:
std::vector<Observer*> observers; //观察者容器
};
int main()
{
Subject sub;
ObserverA observer1;
ObserverB observer2;
sub.add(&observer1);
sub.add(&observer2);
sub.notify();
return 0;
}
网友评论