ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

开闭原则

2022-02-17 10:32:28  阅读:198  来源: 互联网

标签:draw shapeEditor 原则 void class new 开闭 public


开闭原则

定义

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

代码示例

反例

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("这是一个三角形");
    }
}

标签:draw,shapeEditor,原则,void,class,new,开闭,public
来源: https://www.cnblogs.com/planted/p/15903473.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有