开闭原则

参考:Spring5核心原理与30个类手写实战

开闭原则(Open-Closed)是指一个软件实体(如类,模块和函数)应该对扩展开放,对修改关闭.所谓的开闭,正是对扩展和修改两个行为的一个原则.它强调的是用抽象构建架构,用实现扩展细节,可以提高软件系统的可复用性和可维护性,开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定,灵活的系统.例如版本更新,我们尽可能不修改源代码,但可以增加新功能.

开闭原则的核心思想就是面向抽象编程.例如: 以课程体系为例,首先创建一个课程接口:

public interface Icourse {
    Integer getId();
    String getName();
    Double getPrice();
}

整个课程有java架构,大数据,AI,前端,软件测试等,下面创建一个java架构课程的类JavaCourse:

public class JavaCourse implements Icourse {
    private Integer Id;
    private String name;
    private Double price;

    public JavaCourse(Integer id, String name, Double price) {
        Id = id;
        this.name = name;
        this.price = price;
    }

    @Override
    public Integer getId() {
        return Id;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public Double getPrice() {
        return price;
    }
}

现在需求是给Java架构课程做活动,价格优惠.如果修改JavaCourse中的getPrice()方法,则存在一定的风险,可能影响其他地方的调用结果.我们如何在不修该原有代码的前提下,实现价格优惠这个功能呢?现在,我们再编写一个处理优惠逻辑的类JavaDiscountCourse

public class JavaDiscountCourse extends JavaCourse{
    public JavaDiscountCourse(Integer id, String name, Double price) {
        super(id, name, price);  //调用父类的构造方法
    }
    public Double getOriginPrice(){
        return super.getPrice();
    }
    //打折
    public Double getPrice(){
        return super.getPrice() * 0.88;
    }
}
posted @ 2020-09-24 11:30  刘指导  阅读(203)  评论(0编辑  收藏  举报