Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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_Composite - Fatal编程技术网

访问复合模式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手册,这一条是准确的:

正如您所看到的,
组件
组合
之间的关联不同:

  • 一个
    Composite
    aggregates
    Component
    s(例如,您可以将它们存储在列表中)
  • 没有子级
另外,
Composite
有一个方法
getChild(intn)
来获取第n个子组件(您只需获取上一个列表的第n个元素)


要获得给定根组件的所有叶子,我想您可以使用以下算法之一

展示您的实施情况好的,谢谢;但是如果我想要一个所有叶子的列表,比如在本例中所有员工的列表?@MaVeRicK_91你想把它放在哪里?如果你需要从Employee类中获取员工列表,你可以为该字段设置一个getter。我不同意这一点<代码>叶子只是一片叶子,它对其他叶子没有任何知识。您给出的示例具有误导性,因为您只有一个类Employee,它同时是一个叶子和一个复合物,但没有说明一般情况。好的,但是方法getChild返回对象复合物的第n个子项,该子项不能是组件列表的第n个叶子元素。确定,这只是为了指出一个事实,维基百科并不像我说的那样错,但有点不精确。。。