一、设计原则之开闭原则

今天的博客主题

      设计原则和模式 --》设计原则之依赖倒置原则


开闭原则 OCP (Open-Closed Principle)

 

开闭原则就是说一个类、方法、模块对扩展和修改两个行为上的一个原则。

具体就是 对扩展开放、对修改关闭 这样的。

 

特别强调的是用抽象构建框架、用实现扩展细节。

这样可以提高软件系统的可复用性、可维护性。

 

开闭原则 是面向对象设计原则中最基础的设计原则。

指导我们如何建立出一个稳定灵活的系统。

 

找一个现实生活中的例子来描述下 开闭原则

eg:盖房子,地基是关闭的,可不能修改,但是地基上面的楼房可以扩展啊,加高加宽装修。

就好比我们系统做完之后,后续的版本更新迭代,尽可能的不去修改源码,但可以增加新功能。

 

实现开闭原则的核心是面向抽象编程!

 

代码示例:

以电商手机模块为例。创建一个手机接口:

public interface IMobilePhone {
    Integer getId();   // 手机ID
    String getModel(); // 手机型号
    Double getPrice(); // 手机价格
}

手机是有很多种的、华为、小米、苹果等等,那创建一个华为手机的类

public class HuaWeiPhone implements IMobilePhone{

    private Integer id;
    private String model;
    private Double price;

    public HuaWeiPhone(Integer id, String model, Double price) {
        this.id = id;
        this.model = model;
        this.price = price;
    }

    public Integer getId() {
        return this.id;
    }

    public String getModel() {
        return this.model;
    }

    public Double getPrice() {
        return this.price;
    }
}

现在要给华为手机做活动,直接修改 HuaWeiPhone 里的 getPrice() 会有风险,因为你清楚别的地方有没有引用到。

那就不能改这个地方了,怎么办呢?加新功能,写一个华为手机活动优惠的一个类

public class HuaWeiDiscountPhone extends HuaWeiPhone {

    public HuaWeiDiscountPhone(Integer id, String model, Double price) {
        super(id, model, price);
    }

    // 手机原价
    public Double getOriginPrice(){
        return super.getPrice();
    }

    // 手机优惠价 88折
    public Double getPrice(){
        return super.getPrice() * 0.88;
    }
}

到这里基本上就算是可以了,看下整体的类图(忽略我 idea 背景。。。)

是不是很简单,实现并不难。难的是怎么把这种思想给运用?什么时候用?用在哪里?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值