设计模式的七大原则——开闭原则

基本介绍:

  1. 开闭原则是编程中最基础,最重要的设计原则
  2. 一个软件实体类,模块,和函数应该对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节
  3. 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改自己的已有的代码来实现变化。
  4. 编程中遵循其他原则,以及使用设计模型的目的就是遵循开闭原则。

实现画图,用非开闭原则实现

Shape类:

public class Shape {
    int mType;
}

Circle类:

public class Circle extends Shape{
    public Circle(){
        super.mType = 2;
    }
}

Rectangle类:

public class Rectangle extends Shape{
    public Rectangle(){
        super.mType=1;
    }
}

主类:

public class kaibiyuanze {
    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("绘制圆形");
    }
}

加入在加入一个绘制三角形

代码修改则是修改许多:

Trianle类:

public class Triangle extends Shape{
    public Triangle(){
        super.mType=3;
    }
}

主类:

public class kaibiyuanze {
    public void drawshape(Shape s){
        if (s.mType == 1){
            drawRectangle(s);
        }
        else if (s.mType==2){
            drawCircle(s);
        }
        else if (s.mType==3){
            drawTriangle(s);
        }
    }
    public void drawRectangle(Shape r){
        System.out.println("绘制矩形");
    }
    public void drawCircle(Shape r){
        System.out.println("绘制圆形");
    }
    public void drawTriangle(Shape r){
        System.out.println("绘制三角形");
    }
}

这种写法:

/**
 * 方式一的优缺点
 * 1.优点是比较好理解,简单易操作
 * 2.缺点是违背了设计模型的ocp原则,即对扩展开放,对修改关闭。即使我们给类添加新的动能也尽量不要去修改代码,我们需要尽可能少修改代码
 *3.比如我们这时要增加一个图形种类,我们需要做如下修改,修改的地方较多
 * 4.新增一个三角形
 * */

使用开闭原则实现:

/**
 * 方式yi的改进的思路分析
 *
 * 把创建Shape类做出抽象类,并且提供一个抽象的draw类,让子类去实现即可,
 * 这样子我有新的图形种类时,只需要让新的图形继承Shape,并且实现draw方法即可
 */

Shape抽象类:

public abstract class Shape {
    int mType;
    public abstract void draw();
}

Circle类:

public class Circle extends Shape {
    public Circle(){
        super.mType = 2;
    }

    @Override
    public void draw() {
        System.out.println("绘制圆");
    }
}

Rectangle类:

public class Rectangle extends Shape {
    public Rectangle(){
        super.mType=1;
    }

    @Override
    public void draw() {
        System.out.println("绘制矩形");
    }
}

添加新的三角形绘制则只需要添加相应的类即可

Triangle类:

public class Triangle extends Shape {
    public Triangle(){
        super.mType=3;
    }

    @Override
    public void draw() {
        System.out.println("绘制三角形");
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值