Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 观察者模式过载_Java_Design Patterns_Observer Pattern - Fatal编程技术网

Java 观察者模式过载

Java 观察者模式过载,java,design-patterns,observer-pattern,Java,Design Patterns,Observer Pattern,我被下面的场景困住了。它有一种代码的味道,我不喜欢,但它的解决方案似乎很复杂,但方式不同 我有一个表示业务对象的场景图。我设计它是为了使业务对象本身尽可能简单。他们实际上是波乔 现在,不同节点可能会在场景图的多个区域中显示一个实体 当实体更改时,所有相关场景图节点都应更改 我不敢在我所有的实体上使用观察者模式,因为我一次在屏幕上有50000多个实体 由于所有更改都是从视图启动的,所以现在我在场景图上递归,并强制重新加载与更改的实体关联的所有节点。但感觉不太对劲 关于如何做得更好,有什么建议吗?实

我被下面的场景困住了。它有一种代码的味道,我不喜欢,但它的解决方案似乎很复杂,但方式不同

我有一个表示业务对象的场景图。我设计它是为了使业务对象本身尽可能简单。他们实际上是波乔

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

当实体更改时,所有相关场景图节点都应更改

我不敢在我所有的实体上使用观察者模式,因为我一次在屏幕上有50000多个实体

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


关于如何做得更好,有什么建议吗?

实体应将其更新发布到单个队列中,然后负责更新视图的对象可以轮询该队列。

业务对象==实体?屏幕上有50k个节点,其中一些实体有多个节点。用户操作改变实体的状态,因此必须更新某些节点。但实体当然不知道节点


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

直接通知的观察者与轮询队列的观察者之间的区别是什么?OP需要一种替代方法,而不是让每个观察者在50000个对象中的每个对象中注册其兴趣。我不确定你的评论指的是什么。我不知道观察者(实体)将更新发布到队列与直接发布到观察者相比有什么好处。在我看来,队列正在通过成为中间人来取代最终观察者,但队列现在无论如何都起到了逻辑观察者的作用。同样,您还没有理解OP。请再次阅读。