定义:在面向对象的编程中,开闭原则规定软件中的对象、类、模块和函数对扩展应该是开放的,但对于修改是封闭的。这意味着应该用抽象定义结构,用具体实现扩展细节,以此来确保软件系统开发和维护中的可靠性
开闭原则的核心思想也可以理解为面向抽象编程。
我的理解就是,不要去改变原有类的属性方法,如果自己需要进行改变的时候可以通过,继承原有的类,重写我们需要的方法,也可以增加我们自己的方法,这个就是 对于对象、类、接口和函数的扩展是开放的,但是对于修改是封闭的
代码实现:
public interface ICalculationArea {
/**
* 计算面积,长方形
* @param x 长
* @param y 宽
* @return 面积
*/
double rectangle(double x,double y);
/**
* 计算三角形的面积
* @param x 边长x
* @param y 边长y
* @param z 边长z
* @return 面积
* 海伦计算三角形的面积公式 S =
*/
double triangle(double x,double y, double z);
/**
* 计算yuan的面积
* @param r 半径
* @return 面积
*/
double circular(double r);
}
public class CalculationAreaExt extends CalculationAreaImpl {
private final static double n = 3.1415926D;
@Override
public double circular(double r) {
return n * r * r;
}
/**
* 按照开闭的原则方式实现起来并不复杂,它的主要的目的是不能因为个例需求的变变化而改变预定的实现类,除非预定的实现类有错误
* 实现过程是继承父类扩展需要的方法,同时可以保留原来的方法,新增自己需要的方法
*/
}
public class CalculationAreaImpl implements ICalculationArea {
public static final double n = 3.14D;
//public static final double n = 3.1415926D;
//如果不考虑开闭原则,直接去修改n的值,基本可以满足需求但是因为精度加长 而破坏了原有精度下的稳定性
@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;
}
}