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

2022-10-20 10:56:14

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

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

其他文章:

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

开闭原则

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

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

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

1.1开闭原则的实际应用

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

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

/**
 * 培训班(Icouse接口)
 * @author WxrStart
 * @create 2022-03-08 14:59
 */publicinterfaceICourse{/**
     * 获取课程名
     * @return
     */StringgetCourseName();/**
     * 获取课程价格
     * @return
     */DoublegetPrice();}
/**
 * java课程(JavaCourse类
 * @author WxrStart
 * @create 2022-03-08 14:59
 */publicclassJavaCourseimplementsICourse{//课程名privateString courseName;//课程价格privateDouble price;publicJavaCourse(String courseName,Double price){this.courseName= courseName;this.price= price;}publicStringgetCourseName(){returnthis.courseName;}publicDoublegetPrice(){returnthis.price;}}

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

/**
 * 处理Java课程优惠逻辑
 * @author WxrStart
 * @create 2022-03-08 15:04
 */publicclassJavaDiscountCourseextendsJavaCourse{publicJavaDiscountCourse(String courseName,Double price){super(courseName, price);}@OverridepublicDoublegetPrice(){returnsuper.getPrice();}publicDoublegetDisCountPrice(){System.out.println(getCourseName()+"课程打折之前:"+super.getPrice());returnsuper.getPrice()*0.5;}}

1.2测试类及其结果

publicclassOcpTest{publicstaticvoidmain(String[] args){JavaDiscountCourse javaDiscountCourse=newJavaDiscountCourse("Java课程",1000.0);System.out.println(javaDiscountCourse.getCourseName()+"课程打折之后:"+javaDiscountCourse.getDisCountPrice());}}

在这里插入图片描述

1.3总结

在这里插入图片描述

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

  • 作者:FatterShday
  • 原文链接:https://blog.csdn.net/qq_29843575/article/details/123544416
    更新时间:2022-10-20 10:56:14