一、定义
在面向对象编程领域中,开闭原则规定软件中的对象、类、模块和函数对扩展应该是开放的,但对于修改是封闭的。
这意味着应该用抽象定义结构,用具体实现扩展细节,以此确保软件系统开发和维护过程的可靠性。
二、示例
对于外部的调用方来说,只要能体现出面向抽象编程,定义出接口并实现其方法,即不修改原有方法体,只通过继承方式进行扩展,都可以体现出开闭原则。
计算三种形状的面积:长方形,三角形,圆形
public interface ICalculationArea {
double rectangle(double x, double y);
double triangle(double x, double y, double z);
double circular(double r);
}
实现类中分别实现三种类型的面积
public class CalculationArea implements ICalculationArea {
private final static double n = 3.14D;
@Override
public double rectangle(double x, double y) {
return x * y;
}
@Override
public double triangle(double x, double y, double z) {
double p = (x + y + z) / 2;
return Math.sqrt(p * (p - x) * (p - y) * (p - z));
}
@Override
public double circular(double r) {
return n * r * r;
}
}
此时的精度 π,可能会随着不同的场景取不同的范围,所以此时会出现个例需求的变化而改变预定的实现类
采用开闭原则,继承父类扩展需要的方法,同时保留原有的方法,新增自己需要的方法
public class CalculationAreaExt extends CalculationArea {
private final static double n = 3.1415926D;
@Override
public double circular(double r) {
return n * r * r;
}
}
此时,单独对圆面积求解进行了扩展,其他的方法不变,可以继续使用
|