开闭原则学习总结笔记

定义:
一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭.
用抽象构建框架,用实现扩展细节
优点:提高软件系统的可复用性及可维护性
实践代码:
抽象接口
/**
 * 开闭原则 首先定义一个接口 和一些方法
 */
public interface ICourse {
    int getId();
    String getName();
    double getPrice();
}
原实现的功能
/**
 * 实现ICourse接口 定义构造参数
 */
public class JavaCourse implements ICourse {
    private Integer id;
    private String name;
    private Double price;

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

    @Override
    public int getId() {
        return this.id;
    }

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

    @Override
    public double getPrice() {
        return this.price;
    }
}
扩展功能
/**
 * 课程打折扩展类 用于在不修改原代码的基础上扩展额外的功能
 */
public class JavaDiscountCourse extends JavaCourse {
    public JavaDiscountCourse(Integer id, String name, Double price) {
        super(id, name, price);
    }
    /**
     * 获得打折后的价格
     */
    public Double getDiscountprice(){
        return super.getPrice()*0.7;
    }

}
测试类
/**
 * 开闭原则测试
 */
public class OpencloseTest {
    public static void main(String[] args) {
        ICourse iCourse= new JavaCourse(1,"测试java课程",88.8);
        System.out.println("课程id:"+iCourse.getId()+
                "\n课程名称:<<"+iCourse.getName()+">>"+
                "\n课程价格:"+iCourse.getPrice());

        //扩展新功能 只需调用新扩展类的功能即可
        ICourse iCourse2= new JavaDiscountCourse(1,"测试java课程",99.9);
        JavaDiscountCourse discountCourse = (JavaDiscountCourse) iCourse2;
        System.out.println("课程id:"+discountCourse.getId()+
                "\n课程名称:<<"+discountCourse.getName()+">>"+
                "\n课程原价:"+discountCourse.getPrice()+
                "\n折后价格:"+discountCourse.getDiscountprice());
    }
}
最后个人总结:

在日常的开发中,某些业务的功能需求在后期需要扩展增加时,就需要去修改原来写的代码模块,这样往往违反了开闭原则,如果应用好开闭原则,在功能设计之初就考虑到拓展问题,那么在后期维护和功能修改增加上就能大大的减少难度,代码整体也更加清晰.