Java设计模式-七大架构设计原则-开闭原则

Java设计模式-七大架构设计原则-开闭原则

从这一专栏开始将学习设计模式,上课学习和自己总结归纳的笔记将总结出来供大家参考。
参考书籍:《设计模式就该这样学》

其他文章:

Java设计模式-UML类图 Java设计模式-七大架构设计原则-开闭原则
Java设计模式-七大架构设计原则-依赖倒置原则 Java设计模式-七大架构设计原则-单一职责原则
Java设计模式-七大架构设计原则-接口隔离原则 Java设计模式-七大架构设计原则-最少知道原则(迪米特法则)
Java设计模式-七大架构设计原则-里氏替换原则和合成复用原则 Java设计模式-创建型设计模式-简单工厂模式
Java设计模式-创建型设计模式-工厂方法模式(工厂模式) Java设计模式-创建型设计模式-抽象工厂模式
Java设计模式-创建型设计模式-建造者模式 Java设计模式-创建型设计模式-原型模式
Java设计模式-创建型设计模式-单例模式 Java设计模式-结构型设计模式-适配器模式
Java设计模式- 结构型设计模式-享元模式 Java设计模式- 结构型设计模式-外观模式
Java设计模式- 结构型设计模式-桥接模式 Java设计模式-结构型模式设计模式-组合模式
Java设计模式-行为型设计模式-观察者模式

文章目录

  • Java设计模式-七大架构设计原则-开闭原则
    • 开闭原则
      • 1.1开闭原则的实际应用
      • 1.2测试类及其结果
      • 1.3总结

开闭原则

开闭原则(Open-Closed Principle OCP):指的是一个软件实体(类、模块和函数)应该对扩展开放,对修改关闭

好处:用抽象构建框架,用实现扩展细节,提高软件系统的可复用性和可维护性。

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

1.1开闭原则的实际应用

现在有一个培训班(Icouse接口),开设了java课程(JavaCourse类),现在要给java课程价格打5折,请写出这个方法

如果要修改JavaCourse类中getPrice(),会存在一定风险,可能会影响其他地方调用的结果

/**
 * 培训班(Icouse接口)
 * @author WxrStart
 * @create 2022-03-08 14:59
 */
public interface ICourse {
    /**
     * 获取课程名
     * @return
     */
    String getCourseName();

    /**
     * 获取课程价格
     * @return
     */
    Double getPrice();
}
/**
 * java课程(JavaCourse类
 * @author WxrStart
 * @create 2022-03-08 14:59
 */
public class JavaCourse implements ICourse{
    //课程名
    private String courseName;
    //课程价格
    private Double price;

    public JavaCourse(String courseName, Double price) {
        this.courseName = courseName;
        this.price = price;
    }

    public String getCourseName() {
        return this.courseName;
    }

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

所以我们新建一个处理优惠逻辑的JavaDiscount类

/**
 * 处理Java课程优惠逻辑
 * @author WxrStart
 * @create 2022-03-08 15:04
 */
public class JavaDiscountCourse extends JavaCourse {
    public JavaDiscountCourse(String courseName, Double price) {
        super(courseName, price);
    }

    @Override
    public Double getPrice() {
        return super.getPrice();
    }

    public Double getDisCountPrice() {
        System.out.println(getCourseName()+"课程打折之前:"+super.getPrice());
        return super.getPrice()*0.5;
    }
}

1.2测试类及其结果

public class OcpTest {
    public static void main(String[] args) {
        JavaDiscountCourse javaDiscountCourse = new JavaDiscountCourse("Java课程", 1000.0);
        System.out.println(javaDiscountCourse.getCourseName()+"课程打折之后:"+javaDiscountCourse.getDisCountPrice());
    }
}

Java设计模式-七大架构设计原则-开闭原则_第1张图片

1.3总结

Java设计模式-七大架构设计原则-开闭原则_第2张图片

从类图可以看出,JavaDiscountCourse类中保留了重写的JavaCourse的getPrice(),而不是直接修改JavaCourse类。

你可能感兴趣的:(Java设计模式,java,设计模式,开闭原则,架构)