【问题标题】:Does "composition over inheritance" also imply "composition over interface"?“组合优于继承”是否也意味着“组合优于接口”?
【发布时间】:2015-09-16 16:01:39
【问题描述】:

我知道继承意味着“是”关系,它也可以具有多态行为。但是例如,在 Java 中,从父类扩展和实现接口的区别在于,接口只有要实现的方法。它们都需要子类依赖父类和领导类相互耦合。

那么,除了从父类继承外,是否应该尽可能避免实现类的接口?

【问题讨论】:

    标签: oop inheritance language-agnostic composition


    【解决方案1】:

    “组合优于继承”原则是指您尝试重用代码的情况。

    原则上说,通过组合重用代码比通过继承更好。

    它不适用于接口,因为接口不实现将被重用的代码(至少,直到 Java 8 :)。

    【讨论】:

      【解决方案2】:

      接口是允许您反转依赖关系的主要机制之一,以便实现可以依赖于抽象而不是相反。因此,如果您遵循 SOLID 原则,则应优先使用接口而不是直接实例化。

      与任何其他语言功能一样,它可能会被滥用或过度使用。但是当用于依赖倒置时,它基本上可以通过轻松扩展程序的行为来增强程序的“组合”。

      当然,如果您有足够的创造力,您可能会弄清楚如何在不使用接口的情况下进行依赖倒置。没有接口的语言长期以来一直在进行依赖倒置。 stdio/iostream API 就是最好的例子之一。它允许为新的字符设备编写设备驱动程序,而无需重新编译写入标准输出的程序。否则,每次有人提出新的行式打印机、终端或串行调制解调器时,您都必须重新编译操作系统上的几乎所有程序。

      【讨论】:

        猜你喜欢
        • 2013-01-03
        • 1970-01-01
        • 2010-12-02
        • 1970-01-01
        • 1970-01-01
        • 2016-10-02
        • 2012-11-01
        • 1970-01-01
        • 2018-10-15
        相关资源
        最近更新 更多