代码设计原则--开闭原则
Posted liweiweicode
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码设计原则--开闭原则相关的知识,希望对你有一定的参考价值。
一、开闭原则定义
开闭原则(Open-Closed Principle,OCP)
一个软件实体如类、模块和函数应该对扩展开放, 对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实 现扩展细节。可以提高软件系统的可复用性及可维护性。开闭原则,是面向对象设计中最基础的设计原 则。它指导我们如何建立稳定灵活的系统,例如:我们版本更新,我尽可能不修改源代码,但是可以增 加新功能。
一个课程系统里面,有不同的课程,课程有统一的行为,获得课程的id,名称,价格,定义一个抽象接口ICourse:
public interface ICourse { Long getId(); BigDecimal getPrice(); String getName(); }
java课程继承了ICourse,内部实现相关的方法,如果有其他的课程,也这样实现
public class JavaClass implements ICourse { private Long id ; private BigDecimal price; private String name; public JavaClass(Long id, BigDecimal price, String name) { this.id = id; this.price = price; this.name = name; } @Override public Long getId() { return id; } @Override public BigDecimal getPrice() { return price; } @Override public String getName() { return name; } }
我们要对课程进行打折,不同课程的打折力度不一样,有的课程不打折,所以不能改变ICourse的接口,在实现类中进行价格的计算:
public class JavaDsicountClass extends JavaClass { public JavaDsicountClass(Long id, BigDecimal price, String name) { super(id, price, name); } public BigDecimal getDiscountPrice(){ BigDecimal price = this.getPrice(); //高精度计算使用BigDecimal内部运算的方法 BigDecimal discountPrice = price.multiply(BigDecimal.valueOf(0.6)); return discountPrice; } }
为了不影响原来的价格,对打折的价格除进行了单独额处理,总体类图如下
以上是关于代码设计原则--开闭原则的主要内容,如果未能解决你的问题,请参考以下文章