基本介绍
1) 开闭原则(Open Closed Principle)是编程中最基础、最重要的设计原则
2) 一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用
方)。用抽象构建框架,用实现扩展细节
3) 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已
有的代码来实现变化。
4) 编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则。
1.错误示范
方式1的优缺点
1) 优点是比较好理解,简单易操作。
2) 缺点是违反了设计模式的ocp原则,即对扩展开放(提供方),对修改关闭(使用方)。
即当我们给类增加新功能的时候,尽量不修改代码,或者尽可能少修改代码.
3) 比如我们这时要新增加一个图形种类 三角形,修改的地方较多,需要改调用的地方的判断和调用的方法。
package com.kris.designmode.principle.ocp;public class Ocp {public static void main(String[] args) {}}/*** 这是一个用户与绘图的类*/class GraphicEditor{public void drawShape(Shape s){if(s.mType == 1){drawRectangle(s);}else if(s.mType == 2){drawCircle(s);}}public void drawRectangle(Shape r){System.out.println("绘制矩形");}public void drawCircle(Shape r){System.out.println("绘制圆形");}}/*** 基类*/class Shape{int mType;}class Rectangle extends Shape{Rectangle(){super.mType=1;}}class Circle extends Shape{Circle(){super.mType=2;}}
2.正确示范
方式1的改进的思路分析
改进的思路分析
思路:把创建Shape类做成抽象类,并提供一个抽象的draw方法,让子类去实现即可,
这样我们有新的图形种类时,只需要让新的图形类继承Shape,并实现draw方法即可,
使用方的代码就不需要修 -> 满足了开闭原则
package com.kris.designmode.principle.ocp.improve;public class Ocp {public static void main(String[] args) {GraphicEditor graphicEditor = new GraphicEditor();graphicEditor.draw(new Rectangle());graphicEditor.draw(new Circle());}}/*** 这是一个用户与绘图的类*/class GraphicEditor{public void draw(Shape s){s.draw();}}/*** 基类* 提供一个抽象的方法draw* 把实现交给子类*/abstract class Shape{int mType;abstract void draw();}class Rectangle extends Shape {Rectangle(){super.mType=1;}void draw() {System.out.println("绘制矩形");}}class Circle extends Shape {Circle(){super.mType=2;}void draw() {System.out.println("绘制圆形");}}
