【发布时间】:2016-05-11 12:07:28
【问题描述】:
我正在使用代码,其中有很多观察者模式实现。所有这些都以这样的方式组织:
一些由观察者实现的接口:
class ObserverInterface {
virtual void FooOccurs() = 0;
};
一些实现注册、注销和通知的类:
class ObservableImpl {
public:
Register(ObserverInterface *observer);
Unregister(ObserverInterface *observer);
private:
void SomeMethod() {
// foo things
for(auto &observer: observers) {
observer.FooOccurs();
}
}
};
每次都有注册和取消注册的复制粘贴以及 ObserverInterface 的每个方法的通知实现。并且每次程序员必须记住调用 Unregister() 时,它的观察者是否会被破坏。
我希望将观察者模式包含在两个类模板中。到目前为止,我有类似的东西: http://rextester.com/UZGG86035
但我不确定我是不是在重新发明轮子。有没有更简单、众所周知的方法来做到这一点?
【问题讨论】:
-
查看boost.org/doc/libs/release/doc/html/signals2.html。它可能不太适合您的 Java 样式代码库,但它是在 C++ 中实现观察者模式的一种常见且众所周知的方法。
标签: c++ c++11 observer-pattern