【问题标题】:Can the Composite (from the Composite Pattern) have an isLeaf() method?Composite(来自 Composite Pattern)可以有一个 isLeaf() 方法吗?
【发布时间】:2013-03-17 03:11:44
【问题描述】:

Composite 是否有理由不具有 isLeaf() 方法?

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

或者,如果我仍然可以像使用它们一样使用它们,那绝对没问题,但是如果我愿意,也可以找出哪个是哪个?

【问题讨论】:

    标签: design-patterns language-agnostic composite


    【解决方案1】:

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

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

    您有计划如何使用它吗?或许具体案例会是一种更好的方式来判断方法的价值。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-11-10
        • 2013-07-22
        • 2016-09-22
        • 2013-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多