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

在这里插入图片描述
例子

假设有一门课程,我们可以获取它的ID,课程名,课程价格

代码

首先创建一个接口

public interface ICourse {
    Integer getId();

    String getName();

    Double getPrice();
}

以Java课程为例

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;
    }

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

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

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

测试

public class Test {
    public static void main(String[] args) {
        ICourse iCourse = new JavaCourse(1, "Java", 200d);
        System.out.println(String.format("课程ID:%d\n课程名:%s\n课程价格:%f", 
                iCourse.getId(), iCourse.getName(), iCourse.getPrice()));
    }
}

在这里插入图片描述

现在有一个需求,到了特定节日需要对课程进行打折,并且不同价位不同折扣

为了不改变原有的接口和实现类,创建一个Java课程的子类

public class JavaDiscountCourse extends JavaCourse {

    public JavaDiscountCourse(Integer id, String name, Double price) {
        super(id, name, price);
    }

    public Double getOriginPrice() {
        return super.getPrice();
    }

    @Override
    public Double getPrice() {
        Double originPrice = getOriginPrice();
        double disCountPrice;
        if (originPrice > 0 && originPrice < 100) {
            disCountPrice = originPrice * 0.95;
        } else if (originPrice >= 100 && originPrice < 200) {
            disCountPrice = originPrice * 0.9;
        } else {
            disCountPrice = originPrice * 0.8;
        }
        return disCountPrice;
    }
}

测试

public class Test {
    public static void main(String[] args) {
        ICourse iCourse = new JavaDiscountCourse(1, "Java", 200d);
        System.out.println(String.format("课程ID:%d\n课程名:%s\n课程价格:%f\n课程原始价格:%f",
                iCourse.getId(), iCourse.getName(), iCourse.getPrice(), ((JavaDiscountCourse) iCourse).getOriginPrice()));
    }
}

在这里插入图片描述
类图
在这里插入图片描述

发布了110 篇原创文章 · 获赞 19 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40833790/article/details/102219865