【问题标题】:In open close principle, what exactly is modification and extension?在开闭原则中,究竟什么是修改和扩展?
【发布时间】:2021-11-06 01:24:12
【问题描述】:

好的,所以我知道修改的明显示例,即当我们需要修改现有行为以添加新行为时。但是,当我们只需要添加不改变任何内容而只是添加新功能的代码时,这算作修改还是扩展?

实例:

当我们有一个代表步行玩家行为的Walking 类并且我们想要添加一个Jumping 类,但需要在Walking 类中添加方法来创建这两种行为之间的转换(例如声明它将如何从Walking 变为Jumping)。

这算不算修改?我的意思是,我们在Walking 类中编写了代码,但是这些代码并没有改变它的任何现有行为(其他方法不需要修改)。或者这是一个扩展(那么,通过扩展,打开关闭原则不是指类class A extends B,而是我们在类中添加的任何功能)?

【问题讨论】:

    标签: oop extends solid-principles open-closed-principle


    【解决方案1】:

    如果Walking 类是公共的并且客户已经在使用它,那么对该类的任何编辑都是修改。扩展显然包括创建Walking 的子类,但也包括其他技术,如对象组合,不涉及编辑类。

    请注意,OCP 并不禁止所有修改。 OCP 最初由 Bertrand Meyer 在Object-Oriented Software Construction 中定义。从第 60 页开始,

    • 如果您对原始软件有控制权并且可以对其进行重写,使其能够在不增加复杂性的情况下满足多种客户的需求,那么您应该这样做。

    您可以将书中的这条建议解释为允许修改 Walking 类(不破坏客户端)。另一方面,Jumping 不能在不编辑 Walking 的情况下添加这一事实似乎强烈表明该设计不开放用于扩展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 1970-01-01
      • 2016-06-10
      • 2011-11-30
      • 1970-01-01
      • 2019-08-12
      • 2011-06-28
      相关资源
      最近更新 更多