设计模式 观察者模式
目录
1. 定义
2. 应用场景
1. 定义
对象间的一种一对多的依赖关系, 以便当一个对象的状态发生改变时, 所有依赖他的对象都得到通知并自动更新.
2. 应用场景
"一" 对 "多" 的依赖关系, "一" 变化 "多" 跟着变化.
现在有这样的一个场景: 我们有一个 数据中心 和 多个显示设备 场景.
代码结构:
观察接口
多个观察者类 继承自 观察接口
客户类通过 容器 组合 所有的观察者类(基类指针)
class IDisplay
{
public:virtual void show(float temprature) = 0;virtual ~IDisplay() {}
};
class DisplayA : public IDisplay
{
public:virtual void show(float temprature){std::cout << "DisplayA Show" << std::endl;}
};
class DisplayB : public IDisplay
{
public:virtual void show(float temprature){std::cout << "DisplayB Show" << std::endl;}
};
class DateCenter
{
public:void Attach(IDisplay* ob){}void Detach(IDisplay* ob){}void Notify(){double d = 1.0;for (auto& ob : obs){ob->show(d);}}
private:std::list<IDisplay*> obs;
};
int main()
{DateCenter* DC = new DateCenter();IDisplay* Da = new DisplayA();DC->Attach(Da);IDisplay* Db = new DisplayB();DC->Attach(Db);// DC 发生变化DC->Notify();
}