以下问题对我来说很难找到一个简洁的解决方案。
假设我在C ++伪代码中有以下对象:
// Class A simply holds a collection of properties.
class A
{
// Some properties
};
// Class B could hold a bounded number of A& references.
// The referenced A objects are not owned by B.
class B
{
A& m_a0;
A& m_a1;
// Some other properties
};
// Class C could hold an unbounded number of A& references.
// The referenced A objects are not owned by C.
class C
{
List<A&> m_aList;
// Some other properties
};
// Class D holds lists of objects.
// The objects are owned by D.
// The A references held by objects of type B or C
// refer to instances of A objects that class D owns
// (ie. entries in m_aList).
class D
{
List<A> m_aList;
List<B> m_bList;
List<C> m_cList;
// Some other properties
};
每个对象都能够发送某些事件的通知;在我的使用环境中,这是其他对象可以响应的Qt C ++“信号”。以下属性包含:
存在以下设置时出现问题:
因为实际上我正在对来自 D 对象的更改通知进行操作,以便在3D中重建其可视化表示,响应 D 更改通知的成本很高,因此在申请的上下文中,上述情况既不准确又效率低下。
我认为以下方法不可行:
通过 D 中的mutator方法限制对 A 对象的所有访问,以便在 A 对象上的属性发生更改时然后mutator方法只发送一次 D 对象通知。这是不可行的,因为传递对 A 对象的引用可能很有用,并且当外部修改 A 引用时, D 仍应发送更改通知。对于 A 中的每个属性,此方法可能还需要单独的mutator方法,这将是一个难以维护的噩梦。
仅在收到 A 通知时发送 D 更改通知,并忽略来自 B 和 C <的通知/ em>对象。这是不可行的,因为 B 或 C 对象可能具有其他内部属性,这些属性会导致更改通知被触发,在这种情况下 D 仍然需要发送自己的通知作为回应。
这个问题是否有可扩展的解决方案?我想实现这样的行为:对于属于 D 的组件的单个属性的每个单独更改, D 将触发一个更改通知。