软件设计七大原则
Posted ch-forever
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件设计七大原则相关的知识,希望对你有一定的参考价值。
## 一、简介
## 二、开闭原则讲解
> 定义:一个软件实体如类、模块、和函数应该对外扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节。
下面我们通过实际编码来理解,
(1)类的关系图
ICourse接口:
public interface ICourse { Integer getId(); String getName(); Double getPrice(); }
JavaCourse类实现ICourse接口:
public class JavaCourse implements ICourse{ Integer id; String name; Double price; public JavaCourse(Integer id, String name, Double price) { this.id = id; this.name = name; this.price = price; } @Override public Integer getId() { return this.id; } @Override public String getName() { return this.name; } @Override public Double getPrice() { return this.price; } @Override public String toString() { return "JavaCourse{" + "id=" + id + ", name=‘" + name + ‘‘‘ + ", price=" + price + ‘}‘; } }
此时,我们的增加一个需求,对课程价格进行打折。如果我们在ICourse接口中重新定义一个方法,用于获取折扣价格,那么我们在JavaCourse类中也同样要对新增的方法进行实现。
ICourse接口,增加getDiscountPricej抽象方法:
public interface ICourse { Integer getId(); String getName(); Double getPrice(); Double getDiscountPrice(); }
JavaCourse类实现getDiscountPrice方法:
public class JavaDiscountCourse extends JavaCourse { public JavaDiscountCourse(Integer id, String name, Double price) { super(id, name, price); } public Double getDiscountPrice(){ return super.getPrice()*0.8; } }
由上述思想我们知道,接口的实现需要更改,这样对于后期的维护以及安全等都是会带来很大的影响的。若是,不同课程的折扣方式不一样呢?这种方式还适应吗?
我们通过新建一个JavaDiscountCourse类继承JavaCourse类,来进行扩展。
public class JavaDiscountCourse extends JavaCourse { public JavaDiscountCourse(Integer id, String name, Double price) { super(id, name, price); } // 获取课程原始价格 public Double getOriginPrice(){ return this.price; } public Double getDiscountPrice(){ return super.getPrice()*0.8; } @Override public Double getPrice(){ return this.price * 0.8; } }
## 三、依赖倒置原则讲解
## 四、单一职责原则讲解
## 五、接口隔离原则讲解
## 六、迪米特法则讲解
## 七、里氏替换原则讲解
## 八、里氏替换原则
## 九、合成复用原则讲解
以上是关于软件设计七大原则的主要内容,如果未能解决你的问题,请参考以下文章
设计模式软件设计七大原则 ( 依赖倒置原则 | 代码示例 )