这个示例在 In-Depth C++11 书中有很详细的说明和实现,这里只记录自己关心的部分。传统观察者模式基本上都是要提供一个接口类用于提供观察者继承从而在数据变化时让接口被调用。一个典型的例子如下:
1 | class Subject; |
以上示例有诸多问题,比如如果想让被通知的接口参数化怎么办?是不是所有观察者都要是 Observer 的派生类?主要就是需要继承这种强关系和参数不够灵活。使用 C++11 可变参数模板来解决传参问题,使用 std::function 来解决继承问题。
1 | // Observer.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 |