1

复合材料不应该有一个isLeaf()方法是有原因的吗?

(因为这种模式的重点是(如果我没记错的话)能够同时使用LeafComposite作为同一个东西,而不区分?)

或者,如果我仍然可以像使用它们一样使用它们,是否完全可以,如果我愿意,还可以找出哪个是哪个?

4

2 回答 2

0

关于 Composite 争论的问题之一是如何处理叶类中的 getChildren()。如果您正在使用接口,则可以将其放在共享接口中,然后在叶类中抛出 UnsupportedOperationException。

您还可以使用访问者对不同的节点类型进行不同的处理,因此以文件夹/文件组合为核心的经典文件系统,您可以使用访问者来轻松为不同类型提供特殊操作(或只处理特定类型)。

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

于 2013-03-27T05:17:29.207 回答
0

我的理解也是,这种模式的本质是在迭代项目时,您不需要知道您引用的实际类型。但是,我使用了该模式并尝试将其转换为特定类型,这实际上与区分 isLeaf 相同。这显然贬低了多态性并违反了 OCP,但是它在那种情况下工作得很好。

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

于 2013-03-27T08:10:34.657 回答