设计模式之观察者模式
观察者模式定义了一种一对多的依赖关系,让多个观察者同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。其UML图如下:
在ConcretSubject内部有一个Observer的列表,当Subject的状态发生改变时,会通知列表内的所有的观察者。而观察者都实现了统一的接口,而不同的观察者在该接口中做出了不同的响应。其示例代码如下:
// ObserverModel.h文件
#pragma once
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
// 观察者
class Observer
{
public:
virtual void Update() = 0;
};
class ConcreteObserver_0 : public Observer
{
public:
virtual void Update()
{
std::cout << "ConcreteObserver_0 知道了" << std::endl;
}
};
class ConcreteObserver_1 : public Observer
{
public:
virtual void Update()
{
std::cout << "ConcreteObserver_1 知道了" << std::endl;
}
};
// 通知者
class Subject
{
public:
virtual void Attatch(Observer * p) = 0;
virtual void Detach(Observer * p) = 0;
virtual void Notify() = 0;
virtual void changeState(std::string str)
{
m_str = str;
Notify();
}
protected:
std