开闭原则
一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。
什么是开闭原则
开闭原则:指一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实现扩展细节。可以提高软件系统的可复用性及可维护性。开闭原则,是面向对象设计中最基础的设计原则。它指导我们如何建立稳定灵活的系统, 例如:我们版本更新,我尽可能不修改源代码,但是可以增加新功能。
案例
在现实生活中对于开闭原则也有体现。比如,很多互联网公司都实行弹性制作息时间, 规定每天工作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 ;
}
}
为什么使用开闭原则
- 开闭原则可以提高复用性
- 开闭原则提高了维护性。