复合设计模式 - 跟踪树结构中叶子的策略

Composite design pattern - strategy for tracking leafs in the tree structure

跟踪树结构中叶子的好策略是什么?

为了我的目的,我的叶子被赋予了名字,但如果不知道它们在树中的位置,这些名字并没有多大意义。例如,可能有许多同名的叶子,所以我需要知道它们位于哪个 "branch" 上。

有什么推荐的技巧吗?

Composite Pattern 可让您在遍历时以相同的方式处理叶子及其 parents\branches。此外,它还为您提供了更改 'main functional' 方法的逻辑以迭代聚合组件(或您的情况下的分支)的 children 并仅对叶组件执行某些操作的工具。

现在回到您遇到的关于叶子必须知道它们所属的分支的问题 - 我认为您的解决方案中的叶子必须有对其 parent/branches 的引用。然后,当您遍历树的叶子时,您可以带出 parent 信息以及叶子信息。如果您想了解 parent 分支,这应该可以解决问题。如果您想保留最多 2 级(grandparents)或更高级别的信息,那么您可以构建一个向上遍历的递归方法,直到满足某些祖先条件或到达树的根。

总结一下我的观点——复合模式的处理与以通用方式处理树和分支有关。但是在遇到它们中的每一个时要执行什么逻辑可以根据节点的类型而变化。这提供了针对我在上一段中给出的示例的 node-type 特定逻辑的灵活性。该逻辑中的内容 - 只要所有节点的基类型相同并且遍历顺利进行,复合模式就与它无关。

希望对您的问题有所帮助。我在我的博客中写了一篇关于 Composite Design Pattern - http://www.javabrahman.com/design-patterns/composite-design-pattern-in-java/ 的文章。如果需要,您可以参考它以进一步了解此模式。