概述
观察者模式在实际应用中,主要适用一对多的消息订阅情景,即一些观察者会监视或者说订阅某个事件或者信号,一旦该事件或者信号发生,则通知所有订阅者进行相应的响应。在Window的窗口程序中应用十分广泛,当用户点击某个按键时,订阅了该按键点击事件的所有观察者作出响应,完成程序对于用户点击这一事件的响应。
代码实现
class Observer{
public:
virtual void Response()=0;
};
class ObserverType1 : public Observer{
public:
void Response() override {
std::cout<<"Observer type1 response."<<std::endl;
}
};
class ObserverType2 : public Observer{
public:
void Response() override {
std::cout<<"Observer type2 response."<<std::endl;
}
};
class Publisher{
public:
void Add(Observer* observer){
observers_.push_back(observer);
}
void OnClick(){
for(auto k:observers_){
k->Response();
}
}
private:
std::vector<Observer*> observers_;
};
int main(){
Publisher publisher;
publisher.Add(new ObserverType1());
publisher.Add(new ObserverType2());
publisher.OnClick();
}
以上为一个简单的实现,有时间的可以自行实现一些更完善的操作,这里推荐使用Boost Signal2这个库,每次事件发生会调用注册的响应函数,使用也比较方便,观察者模式的基本功能都实现了。