访问复合模式Java的叶子
我实现了复合模式,用于表示一棵元素树,如图所示:访问复合模式Java的叶子,java,design-patterns,composite,Java,Design Patterns,Composite,我实现了复合模式,用于表示一棵元素树,如图所示: 但我如何才能访问这棵树的叶子,就像一张叶子列表。我应该实现访客吗?树叶的实现方式如下: public class Leaf{ private List<Leaf> leaves; ...... } 公共类叶{ 私人名单; ...... } 因此,理想情况下,您不需要任何其他设计模式 您可以将此视为经理和员工之间的关系 作为员工的经理可以拥有在该经理手下工作的员工列表 public class Employee{
但我如何才能访问这棵树的叶子,就像一张叶子列表。我应该实现访客吗?树叶的实现方式如下:
public class Leaf{
private List<Leaf> leaves;
......
}
公共类叶{
私人名单;
......
}
因此,理想情况下,您不需要任何其他设计模式
您可以将此视为经理和员工之间的关系
作为员工的经理可以拥有在该经理手下工作的员工列表
public class Employee{
private List<Employee> workingUnderHim;
......
}
公共类员工{
他手下的私人名单;
......
}
我看到您从维基百科上获取了类图,但遗憾的是它错了。关于GoF手册,这一条是准确的:
正如您所看到的,组件
和组合
之间的关联不同:
- 一个
aggregatesComposite
s(例如,您可以将它们存储在列表中)Component
没有子级叶
Composite
有一个方法getChild(intn)
来获取第n个子组件(您只需获取上一个列表的第n个元素)
要获得给定根组件的所有叶子,我想您可以使用以下算法之一 展示您的实施情况好的,谢谢;但是如果我想要一个所有叶子的列表,比如在本例中所有员工的列表?@MaVeRicK_91你想把它放在哪里?如果你需要从Employee类中获取员工列表,你可以为该字段设置一个getter。我不同意这一点<代码>叶子只是一片叶子,它对其他叶子没有任何知识。您给出的示例具有误导性,因为您只有一个类Employee,它同时是一个叶子和一个复合物,但没有说明一般情况。好的,但是方法getChild返回对象复合物的第n个子项,该子项不能是组件列表的第n个叶子元素。确定,这只是为了指出一个事实,维基百科并不像我说的那样错,但有点不精确。。。