【发布时间】:2010-07-01 20:23:45
【问题描述】:
在我的应用程序中,我有很多课程。这些类中的大多数都存储了相当多的数据,如果其中一个数据类的内容发生变化,我的应用程序中的其他模块也必须“更新”,这一点很重要。
典型的做法是这样的:
void MyDataClass::setMember(double d)
{
m_member = d;
notifyAllObservers();
}
如果成员不经常更改并且“观察类”需要尽快更新,这是一个非常好的方法。
观察变化的另一种方式是:
void MyDataClass::setMember(double d)
{
setDirty();
m_member = d;
}
如果成员多次更改,这是一个很好的方法,并且“观察类”会定期查看所有“脏”实例。
不幸的是,我的课程中混合了这两种数据成员。有些更改不那么频繁(我可以与普通观察者一起生活),有些更改很多次(这是在复杂的数学算法中)并且每次值更改时调用观察者都会破坏我的应用程序的性能。
还有其他观察数据变化的技巧,或者可以轻松组合几种不同的观察数据变化方法的模式吗?
虽然这是一个与语言无关的问题(我可以尝试理解其他语言的示例),但最终的解决方案应该可以在 C++ 中使用。
【问题讨论】:
标签: c++ language-agnostic design-patterns observer-pattern