Java 在使用复合材料时,如何确定和铸造复合材料的特定对象?

Java 在使用复合材料时,如何确定和铸造复合材料的特定对象?,java,design-patterns,composite,Java,Design Patterns,Composite,我想要一个由JSON构建的复合结构。每个元素只能有一种类型的子元素,因此一个组只能包含组或叶。然后基于这棵树,我想画一个图形用户界面组件,它将根据自身组或叶的类型进行不同的渲染和运行不同的操作 问题是如何确定渲染什么以及在图形上附加哪些侦听器。树只是一个模型,所以它不应该包含进行图形或控制的方法 检查它是否是某个对象的实例并将组件转换为正确的类型,然后进行正确的设置,这是一种好的做法还是坏的做法 使用枚举和getter来确定它怎么样 我知道答案是可行的,但我想听听好的做法 检查它是否是某事物的实

我想要一个由JSON构建的复合结构。每个元素只能有一种类型的子元素,因此一个组只能包含组或叶。然后基于这棵树,我想画一个图形用户界面组件,它将根据自身组或叶的类型进行不同的渲染和运行不同的操作

问题是如何确定渲染什么以及在图形上附加哪些侦听器。树只是一个模型,所以它不应该包含进行图形或控制的方法

检查它是否是某个对象的实例并将组件转换为正确的类型,然后进行正确的设置,这是一种好的做法还是坏的做法

使用枚举和getter来确定它怎么样

我知道答案是可行的,但我想听听好的做法

检查它是否是某事物的实例是一种好的做法还是一种坏的做法 并将组件转换为正确的类型,然后进行正确的设置

我个人认为这将打破这种模式。 根据维基百科:

在处理树结构数据时,程序员通常必须 区分叶节点和分支。这使得代码更加复杂 复杂,因此容易出错。解决方案是一个 允许统一处理复杂对象和基本对象。在里面 在面向对象编程中,复合对象是设计为 由一个或多个相似物体组成,所有物体都表现出相似的特征 功能

复合模式可以帮助您将容器和叶作为同一类型使用。 看这个


我建议您向组件类添加并抽象draw方法,并让其子类实现它。Leaf将有一个不同于Composite的实现。通过这种方式,遍历树的客户机类不需要知道节点是否为叶,只需在其上调用draw方法即可

是的,但是它不违反MVC模式吗?我的复合对象是序列化和反序列化的,它只是一个数据模式。我认为它应该只包含数据。我错了吗?还有一个决定要做——附加哪些听众?这是针对叶子或复合材料的特定元素而做的。@Michal Chudy:反对意见很好。让我考虑一下。@Michal Chudy:老实说,我不知道。当然,这并不取决于复合材料本身,而是如何在设计中使用它。您有应用程序的UML模型吗?这可能是有用的。我希望有比我更专业的人加入这个帖子,给我们一些好的建议。我也很感兴趣。对不起,是的,我也很想知道答案。只要我能够提取常用方法并使用一些装饰器来构建一个each视图,我就无法找到如何将一些特定于对象的操作分配给该视图,因为它依赖于组合或叶的特定字段,这是完全不同的。对不起,我没有UML。如果需要的话,我明天会做一个。