观察者模式重载

时间:2009-11-18 17:01:44

标签: java design-patterns observer-pattern

我坚持以下方案。它有一种代码味道,我不满意,但它的解决方案似乎很复杂,但只是以不同的方式。

我有一个表示业务对象的场景图。我已经设计了它,以便业务对象本身尽可能简单。他们实际上是POJO。

现在,不同节点可能会在场景图的多个区域中显示1个实体。

当实体发生变化时,所有相关的场景图节点都应该改变。

我对在我的所有实体上使用观察者模式犹豫不决,因为我一次在屏幕上有超过50000个实体。

由于所有更改都是从视图启动的,所以我现在正在递归场景图并强制重新加载与更改的实体关联的所有节点。虽然感觉不对。

有关如何做得更好的任何建议?

2 个答案:

答案 0 :(得分:3)

业务对象==实体?您有50k在屏幕上表示为节点,其中一些实体具有多个节点。用户操作会激活实体的状态,因此必须更新某些节点。但当然,实体不了解节点。

我会让代理对象包装实体。他理解与节点的关系。对实体的更新通过他进行,因此他可以完成更新,然后通知相关节点。实际上,这避免了必须迭代寻找更新的节点集。

答案 1 :(得分:2)

实体应将更新发布到单个队列中,然后由负责更新视图的对象进行轮询。