【发布时间】:2014-10-08 10:34:32
【问题描述】:
我正在尝试使用复合模式重构树状结构。但是,它似乎并不完全符合模式要求:
- 可能有不同类型的叶节点:它们的属性和操作(方法)不同
- 可能有不同类型的复合对象:它们的属性和操作不同,并且有一些约束(例如:Composite1 对象不能是 Composite2 子对象;Composite2 对象可以是 Composite1 子对象)
情况如下图所示:
所以,我想知道哪个是最好的解决方案:
- 由于叶子和复合接口已经不同 和节点操作操作在复合中实现 类,我正在考虑实现一些操作 isComposite1() 和 isComposite2() 并使用上面的模式。
- 我还可以在抽象类中实现节点操作操作和 也属于不同叶子的;那么我可以 如果它们不属于,则使用不执行任何操作的操作来覆盖它们 到那个班级。这样,所有的接口都是一样的 类,我可以以同样的方式对待所有节点......
- 也许 Composite 不是在这里使用的模式?我读过一些文章 建议复合+访客。对这个有用吗 结构体?也许架构有太多的限制和 约束?
欢迎任何指导或建议...
提前致谢。
编辑
在仔细考虑了@Waog 的回复,阅读了有关该主题的更多参考资料并再次考虑我的问题后,我认为合理的解决方案可能如下所示:
一个 Node 接口,用于为不同类型的节点(叶子,复合)组合结构和特定接口。此外,在需要时使用抽象类提供默认实现。下图是最终情况:
非常感谢@Waog 的想法和解释。我希望我有这个想法......
【问题讨论】:
标签: java design-patterns composite