Composite(来自Composite Pattern)可以有一个isLeaf()方法吗?

时间:2013-03-27 04:44:30

标签: design-patterns language-agnostic composite

是否有理由 Composite 不应该使用isLeaf()方法?

(因为这个模式的重点是(如果我没错),能够同时使用 Leaf Composite ,没有微分?)

或者,如果我仍然可以使用它们就好像它们是同一个东西,那么它是绝对可以的,但是也会找出哪个是我想要的?

2 个答案:

答案 0 :(得分:0)

关于Composite的一个有争议的问题是如何处理叶类中的getChildren()。如果您使用的是接口,则可以在共享接口中使用它,然后在叶类中抛出UnsupportedOperationException。

您还可以使用Visitor对不同的节点类型进行不同的处理,因此文件夹/文件复合是其核心的经典文件系统,您可以执行一个访问者,这样可以轻松地为不同的节点提供特殊操作类型(或仅处理特定类型)。

你有计划如何使用它吗?也许具体案例是更好的方式来认定方法的价值。

答案 1 :(得分:0)

这也是我的理解,这种模式的本质是,当您迭代项目时,您不需要知道您有引用的实际类型。但是,我已经使用了模式并包含了转换为特定类型的尝试,实际上与使用isLeaf进行区分相同。这显然会使多态性贬值并违反OCP,但在这种情况下它可以正常工作。

我将设计模式视为扶手,而不是手铐。