JAVA 七大设计原则(一、开闭原则)
1,开闭原则
开闭原则(Open-Closed Principle, OCP)是指一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实现扩展细节。可以提高软件系统的可复用性及可维护性。开闭原则,是面向对象设计中最基础的设计原则。它指导我们如何建立稳定灵活的系统,例如:我们版本更新,我尽可能不修改源代码,但是可以增
加新功能。
我们以超市买饮料来举个例子:
一个超市要买饮料(偶尔会有促销饮料),我们共定义了3个类,超市类,负责售卖饮料,饮料类,包含饮料名称售价信息,促销饮料(饮料类的子类)。
Market.java 超市类,有一个main方法,负责售卖饮料的行为
public static void main(String[] args) {
Drinks drinks = new Drinks();
System.out.println("开始卖" + drinks.getName() + "饮料,价格是:¥" + drinks.getPrice() + "元");
}
Drinks .java 饮料类,假设这个饮料是雪碧,价格是5块钱
public class Drinks {
public String getName() {
return "雪碧";
}
public double getPrice() {
return 5;
}
}
先看前两个类,也就是普通的调用;当我们售卖促销饮料,促销价打八折的时候,展示促销价格需要对饮料做扩展,为了保证功能改动对原有功能造成风险,我们不会直接改原来的类,而是重新写一个子类,扩展它的功能。
HotDrinks.java 促销饮料类,假设促销价是打八折
public class HotDrinks extends Drinks {
public double getActityPrice() {
return getPrice() * 0.8;
}
}
这个子类没有Override重写父类的getPrice(),而是扩展了一个方法getActityPrice()来返回促销价格。
这样Market的调用代码变成了这样
HotDrinks hotDrinks = new HotDrinks();
System.out.println("开始卖" + hotDrinks.getName() + "饮料,原价是:¥" + hotDrinks.getPrice() + "元,"
+ "促销价格是:¥" + hotDrinks.getActityPrice() + "元");
下面是它们之间的类关系图
对这个例子来说,开放了对Drink类的扩展功能,而关闭了子类重写父类方法带来风险的途径。这就是所谓的开闭原则