扩展开放,修改封闭 开闭原则规定“软件中的对象(类、模块、函数等等)应该对应扩展是开发的,但是对于修改是封闭的”
面经计算案例
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=√[p(p-a)(p-b)(p-c)] 其中:p=(a+b+c)/2*/double triangle(double x, double y, double z);/*** 计算面积,圆形* @param r 半径* @return 面积** 圆面积公式:S=πr²*/double circular(double r);}
private final static double π = 3.14D;public double rectangle(double x, double y) {return x * y;}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));}public double circular(double r) {return π * r * r;}
当业务需要 π需要保留5位小数时,我们不能修改原有定义了的逻辑。
没有在原有的逻辑上去修改, 而是继承原有的接口上重新定义扩展该接口的逻辑。
public class CalculationAreaExt extends CalculationArea {private final static double π = 3.141592653D;@Overridepublic double circular(double r) {return π * r * r;}}
public static void main(String[] args) {CalculationArea area = new CalculationAreaExt();double circular = area.circular(4);System.out.println("circular = " + circular);}
