开闭原则

开闭原则

一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。

什么是开闭原则

开闭原则:指一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实现扩展细节。可以提高软件系统的可复用性及可维护性。开闭原则,是面向对象设计中最基础的设计原则。它指导我们如何建立稳定灵活的系统, 例如:我们版本更新,我尽可能不修改源代码,但是可以增加新功能。

案例

在现实生活中对于开闭原则也有体现。比如,很多互联网公司都实行弹性制作息时间, 规定每天工作8小时。意思就是说,对于每天工作8小时这个规定是关闭的,但是你什 么时候来,什么时候走是开放的。早来早走,晚来晚走。

实现开闭原则的核心思想就是面向抽象编程,接下来我们来看一段代码:

以体系为例,首先创建一个课程接口 ICourse:

public interface ICourse {

    Integer getId(); 

    String getName(); 

    Double getPrice();
}
public class JavaCourse implements ICourse{  

    private Integer Id;

    private String name;

    private Double price;
    
    public JavaCourse(Integer id, String name, Double price) { 
       this.Id = id;
       this.name = name;
       this.price = price;
    }

    public Integer getId() { 
       return this.Id;
    }
}
public class Client{

   public static void main(Strings[] args){
     ICourse course = new JavaCourse(1,"Java",100.00);
     System.out.println("书籍名字:"+course.getName()+"书籍价格:"+novel.getPrice());
   }

}

随着项目的发展我们需要对商品的价格进行打折出售,此时我们该如何做呢?

  • 我们可以在Icourse中增加打折方法。
  • 我们可以直接修改JavaCourse类的getPrice方法
  • 我们可以增加实现类OffJavaCourse继承JavaCourse 然后在这个价格的基础上实现一个打折方法

其实我们在实际开发过程中用这三种方法都可以,因为都需要测试后上线。 在实际的开发过程中,对于这种小的需求更改,我们更偏向方法1,简单直接。如果项目熟练,开发熟练的情况下,其实我们也会自测上线。因为我们还会考虑代码的可维护性。人员的迭代更换等多种情况。
但是我们实际应该用第三种方式去实现,因为这样式付出代价 最小,风险最低的方式。


public class OffJavaCourse extends JavaCourse {

    public OffJavaCourse(Integer id, String name, Double price) {
        super(id, name, price);
    }

    @Override
    public Double getPrice() {
        return super.getPrice() * 0.5 ;
    }
}

为什么使用开闭原则

  • 开闭原则可以提高复用性
  • 开闭原则提高了维护性。

文章作者: 凌云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 凌云 !
  目录