设计模式设计原则之开闭原则

开闭原则的定义

  • 在面向对象编程中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展(提供方)是开放的,但是对于修改(使用方)是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。该特性在产品化的环境中是特别有价值的,在这种环境中,因为改变源代码需要代码审查,单元测试以及诸如此类的用以确保产品使用质量的过程。遵循这种原则的代码在扩展时并不发生改变,因此无需上述的过程。
  • 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现
  • 开闭原则非常重要,设计模式的目的就是遵循开闭原则

实现修理设备的功能

//修理设备 (使用方)
class RepairDevice {
    /**
     * 修理方法
     * @param device //维修设备
     */
    public void repair(Device device) {
        if (device.deviceType == 1) {
            repairIphone();
        }
    }
    public void repairIphone() {
        System.out.printf("修理手机");
    }
}

class Device {
    int deviceType;//设备类型
}

class Iphone extends Device {
    public Iphone() {
        super.deviceType = 1;
    }
}

传统的实现方式虽然逻辑简单,但是扩展性很差,扩展功能修改的地方非常多。

增加电脑的维修方法


//修理设备 (使用方)
class RepairDevice {
    /**
     * 修理方法
     * @param device //维修设备
     */
    public void repair(Device device) {
        if (device.deviceType == 1) {
            repairIphone();
        } else if (device.deviceType == 2) {
            //修改原有的修理方法,原有的方法又需要重新做单元测试。
            repairComputer();
        }
    }
	.......
    //增加电脑维修方法
    public void repairComputer() {
        System.out.printf("修理电脑");
    }
}

class Device {
    int deviceType;//设备类型
}
//增加电脑类(提供方)
class Computer extends Device {
    public Computer() {
        super.deviceType = 2;
    }
}

采用开闭原则实现


//修理设备 (使用方)
class RepairDevice {
    /**
     * 修理方法
     * @param device 维修设备
     */
    public void repair(Device device) {
        device.repair();
    }
}

abstract class Device {
    public abstract void repair();
}

class Iphone extends Device {
    @Override
    public void repair() {
        System.out.printf("修理手机");
    }
}
//新增实现
class Computer extends Device {
    @Override
    public void repair() {
        System.out.printf("修理电脑");
    }
}

通过开闭原则实现的功能,在扩展功能是只需新增代码实现,而不用修改以前的代码。这样就是避免影响到之前稳定的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值