开闭原则

开闭原则

定义

对扩展开放,对修改关闭。对提供方的代码修改开放,对使用方的代码修改关闭。即提供方代码的修改,不影响使用方代码的运行。

代码示例

反例

package com.yyy.severnPrinciple.openandclose;

//开闭原则
//对提供方代码的修改开启,对使用方代码的修改关闭
//下方的这个示例就不满足开闭原则,当提供方代码修改时,使用方必须也要修改代码才能实现某个功能
public class OpenAndClose {
    public static void main(String[] args) {
        ShapeEditor shapeEditor=new ShapeEditor();
        shapeEditor.draw(new JvXin());
        shapeEditor.draw(new YuanXin());
        shapeEditor.draw(new SanJiao());
    }


}
//使用方
class ShapeEditor {
    public void draw(Shape s) {
        if(s.type==1){
            System.out.println("这是一个矩形");
        }else if (s.type==2){
            System.out.println("这是一个圆形");
        }else{
            System.out.println("这是一个三角形");
        }
    }
}

class Shape {
        int type;

}
//提供方
class JvXin extends Shape{
    JvXin(){
        super.type=1;
    }

}

class YuanXin extends Shape {
    YuanXin(){
        super.type=2;
    }

}

class SanJiao extends Shape{
    SanJiao(){
        super.type=3;
    }

}

正例

package com.yyy.severnPrinciple.openandclose;
//在上一个例子中,做一些优化,使其符合开闭原则
//通过下方代码的修改,新增一个图形时,使用方的代码就无需修改,从而满足了开闭原则
public class OpenAndClose2 {
    public static void main(String[] args) {
        ShapeEditor1 shapeEditor=new ShapeEditor1();
        shapeEditor.draw(new JvXin1());
        shapeEditor.draw(new YuanXin1());
        shapeEditor.draw(new SanJiao1());
    }

}
//绘图类,使用方
class ShapeEditor1{
    public void draw(Shape1 s){
        s.run();
    }
}


interface Shape1{
    public void run();
}
//图形,提供方
class JvXin1 implements Shape1{
    public void run(){
        System.out.println("这是一个矩形");
    }
}
class YuanXin1 implements Shape1{
    public void run(){
        System.out.println("这是一个圆形");
    }
}
class SanJiao1 implements Shape1 {
    public void run() {
        System.out.println("这是一个三角形");
    }
}

posted @ 2022-02-17 10:24  杨远  阅读(73)  评论(0编辑  收藏  举报