【问题标题】:Is it a good practice to make concrete classes final?将具体课程定为最终课程是一种好习惯吗?
【发布时间】:2021-05-17 18:45:35
【问题描述】:

开闭原则是面向对象设计的五个 SOLID 原则之一。它指出“软件实体(类、模块、函数等)应该对扩展开放,对修改关闭”。

但最近大多数编程语言都通过提供诸如final 之类的关键字来提供一种终结类的方法,以便将来不会继承它。像 Kotlin 这样的一些语言默认有它们的类 final(又名 opt-in open)。

我还阅读了一些文章,其中指出接口继承必须优先于实现继承,并具有有效的推理,例如脆弱的基类问题。但是 OCP 告诉我们应该为扩展开放类。那么我应该考虑宣布我的课程开放吗?还是决赛?一般而言,哪种做法是好的做法?

【问题讨论】:

    标签: inheritance final open-closed-principle


    【解决方案1】:

    我认为没有!

    这背后的主要原因如下。

    开闭原则以非常直接的方式解决了这一问题。它说你应该设计永不改变的模块。当需求发生变化时,您可以通过添加新代码来扩展此类模块的行为,而不是通过更改已经工作的旧代码。”

    所以我们可以说它是任何代码的结构格式!

    【讨论】:

      【解决方案2】:

      继承只是用于实现 OCP 的技术之一。策略模式、装饰器模式、普通组合、参数多态和其他技术也可以用来实现这些目标。继承始终是一种选择,但应尽可能避免。

      【讨论】:

        猜你喜欢
        • 2011-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-23
        • 2019-04-11
        • 1970-01-01
        • 2013-03-28
        相关资源
        最近更新 更多