Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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_Events_Properties - Fatal编程技术网

Java 将属性更改事件从大(大)子级传播到父级的正确方法

Java 将属性更改事件从大(大)子级传播到父级的正确方法,java,events,properties,Java,Events,Properties,我正在寻找一种合适的方法,将财产变更事件从孙子传给其父代。 假设我们有一些树结构,当某个叶子的某些属性发生变化时,应该通知该树的根。 我想,一种方法是将属性更改侦听器从节点添加到其子节点,然后依次将事件重新激发到前置节点。 另一种方法是让根订阅其所有子级的属性更改事件,而不考虑层次结构。 所以问题是如何正确地做到这一点?有什么模式吗?我认为有一个折衷办法,这取决于修改树的频率与传播事件的频率 如果树频繁更改,我会通过树上的直接父级将信息传递回。唯一需要的设置是每个节点中的父指针。它也很简单 如果

我正在寻找一种合适的方法,将财产变更事件从孙子传给其父代。 假设我们有一些树结构,当某个叶子的某些属性发生变化时,应该通知该树的根。 我想,一种方法是将属性更改侦听器从节点添加到其子节点,然后依次将事件重新激发到前置节点。 另一种方法是让根订阅其所有子级的属性更改事件,而不考虑层次结构。
所以问题是如何正确地做到这一点?有什么模式吗?

我认为有一个折衷办法,这取决于修改树的频率与传播事件的频率

如果树频繁更改,我会通过树上的直接父级将信息传递回。唯一需要的设置是每个节点中的父指针。它也很简单


如果树的更改相对较少,并且通知过程的性能很重要,那么最好在根和每个叶之间建立一个直接的侦听器关系。

在我的一个项目中,我们开发了一个这样做的框架。最后,我们的决定是显式订阅嵌套结构的属性,而不是使用类似于重新触发事件的内容。这会变得相当混乱

我们的解决方案是一个基于地图的模型,由树状结构组成。可以在树中的任何位置注册侦听器。为了更好地使用,我们将其封装在代理shell中,使树结构消失在POJO后面(在构建模型时从POJO构建树结构)


当然,我们寻找的框架已经可以做我们想要的,但没有。所有现有框架仅处理平面POJO。这是一个很大的工作,但现在我们非常满意

顺便说一句,我们主要使用该模型将GUI元素绑定到复杂的POJO。