架构设计原则之开闭原则-OCP
架构设计原则之开闭原则
开闭原则-OCP
开闭原则定义
Software entities like classes, modules and functions should be open for extension but closed for modifications.
开闭原则(Open-Closed Principle, OCP) 指一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节。
所谓开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实现扩展细节,可以提高软件系统的可复用性及可维护性。
当软件需要变化时,尽量通过扩展软件实体的行为来实现变化 ,而不是通过修改已有的代码来实现变化
开闭原则是面向对象设计中最基础的设计原则。
它指导我们如何建立稳定灵活的系统,例如版本更新,我们尽可能不修改源码,但是可以增加新功能。
实现开闭原则的核心思想就是面向抽象编程
我们来看一代代码,以课程为例:
- 首先创建一个课程接口ICourse
public interface ICourse{ Integer getId(); String getName(); Double getPrice(); }
- 整个课程有Java架构,大数据等,我们先创建一个Java架构课程的类 JavaCourse
public class JavaCourse implements ICourse{ private Integer id; private String name; private Duble price; public JavaCourse(Integer id, String name, Double price){ this.id = id; this.name = name; this.price = price; } //set、get 方法略 }
- 现在要给Java架构课程做活动,价格优惠。如果修改JavaCourse中的getPrice()方法,则会存在一定风险,可能影响其他地方的调用结果。如何在不修改原有代码的前提下,实现价格优惠这个功能呢?我们再写一个处理优惠逻辑的类——JavaDiscountCourse类(可以思考一下为什么要叫JavaDiscountCourse,而不叫DiscountCourse)
public class JavaDicountCourse extends JavaCourse{ public JavaDiscountCourse(Integer id, String name, Double price){ super(id, name, price); } public Double getOriginPrice(){ return super.getPrice(); } pubilic Double getPrice(){ return super.getPrice() * 0.61; } }
最后,我们一起回顾一个类图
从类图中可以看出,JavaDiscountCourse中保留了覆盖JavaCourse的getPrice()方法,而不是直接修改JavaCourse类
下一篇:
Java的基础算法(一)