本文主要是介绍六大设计原则之开闭原则,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
开闭原则要求对象、类、模块、函数对扩展开发,对修改封闭。所以要用抽象来定义结构,用实现扩展细节,可以理解为面向抽象编程,定义接口并实现方法,在扩展时通过继承的方式扩展。
案例
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 π = 3.14D;@Overridepublic double rectangle(double x, double y) {return x * y;}@Overridepublic double triangle(double x, double y, double z) {double p = (x + y + z) / 2;return Math.sqrt(p * (p - x) * (p - y) * (p - z));}@Overridepublic double circular(double r) {return π * r * r;}
}
这里的π已经定义好了,如果不左考虑简单地进行修改就是直接在代码中修改π的值,如果按照开闭原则的话,应该新建一个CalculationArea的子类在子类中定义π,然后重写计算圆形面积的方法。
public class CalculationAreaExt extends CalculationArea{private final static double π = 3.1415926D;@Overridepublic double circular(double r) {return π * r *r;}
}
对于子类,三角形和长方形的面积计算逻辑还是原来的,圆形的面积计算π的精度更高了。
那么开闭原则解决了什么样的问题呢?比如有这样的情况,不同的接口都依赖了某个接口,也就是一个公共接口,当某个接口需要该接口的某个方法进行调整,但是其他的接口又需要使用原本的逻辑,那么开闭原则很好地解决了这个问题,通过开闭原则,迭代代码时,只影响到有需要的代码。开闭原则的目的是不因为个例的需求变化而改变预订的实现类。
参考资料:《重学Java设计模式》
这篇关于六大设计原则之开闭原则的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!