← 模式
观察者
12345678910111213141516171819202122232425262728293031323334 | #include <vector> #include <functional> class observer { public: virtual void notify() = 0; }; class observer_concrete : public observer { public: virtual void notify() override { } }; class subject { public: void register_observer(observer& o) { observers.push_back(o); } void notify_observers() { for (observer& o : observers |
此模式采用 CC0 公共领域贡献 许可。
需要 c++11 或更新版本。
意图
在事件发生时通知通用的观察者对象。
描述
观察者模式允许将通用的观察者对象注册到目标对象上,并在特定事件发生时接收通知。
定义于第 17–34 行的 subject
类包含一个存储观察者引用的 std::vector
(见第 33 行)。在本例中,观察者(也称为监听者)是实现了 observer
接口(第 4–8 行)的对象。register_observer
函数(第 20–23 行)将观察者添加到这个 std::vector
中,随后 notify_observers
函数(第 25–30 行)会通知这些观察者。
我们对 std::vector
的元素使用了 std::reference_wrapper
(第 33 行),因为标准容器要求其元素类型是可赋值的,而普通的引用类型不满足这个条件。