开闭原则
基本介绍:
- 开闭原则是编程中最基础,最重要的设计原则
- 一个软件实体如类、模块和函数应该对拓展开放,对修改关闭。用抽象构建框架,用实现扩展细节。
- 当软件需要变化的时候,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化
- 编程中遵守其他原则,以及使用设计模式的目的就是遵循开闭原则
如以下例子:实现画图功能
class GraphicEditor{ public void drawShape(Shape s) { if(s.type==1) { drawRectangle(s); }else if(s.type==2) { drawCirle(s); } } public void drawRectangle(Shape s) { System.out.println("画出正方形"); } public void drawCirle(Shape s) { System.out.println("画出圆"); } } class Shape{ int type; } class Rectangle extends Shape{ } class Cirle extends Shape{ }
上述方法存在问题在于每次新加一个类的时候都会导致原来的代码的修改
需要符合开闭原则则需要进行代码重构
class GraphicEditor{ public void drawShape(Shape s) { s.drawShape(); } } class Shape{ int type; public void drawShape() { } } class Rectangle extends Shape{ public Rectangle() { // TODO Auto-generated constructor stub super.type=2; } @Override public void drawShape() { // TODO Auto-generated method stub System.out.println("画出正方形"); } } class Cirle extends Shape{ public Cirle() { // TODO Auto-generated constructor stub super.type=1; } @Override public void drawShape() { // TODO Auto-generated method stub System.out.println("画出圆"); } }
注意事项与细节:
- 开闭原则说白了就是,应该在不修改现有代码的基础上,引入新功能。
- 开闭原则中的“开”,是指对于组件功能的扩展是开放的,是允许对其进行功能扩展的;开
- 闭原则中的“闭”,是指对于原有代码的修改是封闭的,即不应该修改原有的代码。
- 而实际上,要做到百分之百的封闭是不可能的,但是在系统设计的时候,还是应该尽量做到这一点。