1.开闭原则
定义
一个软件实体如:类,模块,函数应该对扩展开放对修改关闭。 用抽象扩展框架,用实体扩展细节。
优点
提高软件系统的可复用性和可维护性。
coding
// 课程抽象类public interface ICourse {Integer getId();String getName();Double getPrice();}// 课程实现类@Data@AllArgsConstructorpublic class JavaCourceImpl implements ICourse {private Integer id;private String name;private Double price;public Integer getId() {return this.id;}public String getName() {return this.name;}public Double getPrice() {return this.price;}}// 扩展功能 需要对java书籍进行打折处理public class JavaCourceSonImpl extends JavaCourceImpl {public JavaCourceSonImpl(Integer id, String name, Double price) {super(id, name, price);}/*** 现在有一个打折需求** @return*/@Overridepublic Double getPrice() {return super.getPrice() * 0.8;}// 扩展方法:获取原价public Double getBeforePrice(){return super.getPrice();}}
满足开闭原则,在不破坏原有实现和原有接口的情况下实现原有实现类并且 重写/追加方法实现该功能。
2.依赖倒置原则
定义
使用单接口多实现的方式来 解决问题,而不要在接口中定义多个方法让一个实现类去实现其中所有方法。
planA
// 定义科目接口public interface ICourse {void study();}// 分别实现这个接口public class JavaIcourse implements ICourse{public void study() {System.out.println("学习java");}}public class PythonIcourse implements ICourse {public void study() {System.out.println("学习python");}}// 根据传入抽象类的类型去动态决定是java还是pythonpublic class Llwmeme {public void studyJavaCource(ICourse iCourse){iCourse.study();}}
planB
// 定义科目接口public interface ICourse {void study();}// 分别实现这个接口public class JavaIcourse implements ICourse{public void study() {System.out.println("学习java");}}public class PythonIcourse implements ICourse {public void study() {System.out.println("学习python");}}// 使用set 注入方式 好处是如果一次要调用两个无须new 两次public class Llwmeme {@Setterprivate ICourse iCourse;public void studyJavaCource(){iCourse.study();}}

3.单一职责原则
一个类只负责一件事情,如果一个类 负责了多件事情,导致多米诺骨牌 连锁 反映 会增加故障率。
4.接口隔离原则
定义
- 用多个专门的接口,而不使用单一的总接口,客户端不应该依赖他不需要的接口。
- 一个类对一个类的依赖应该建立在最小的接口上。
- 尽量细化方法接口中的方法尽量少。
- 意思是用多个小接口来写,因为如果写个大接口 就需要把这个接口所有的方法都实现了。
5.迪米特法则(最少知道原则)
定义
一个对象应该对其他对象保持最少了解,又叫最少知道原则。 尽量减少类于类的耦合性
6.里氏替换原则
定义
子类对象 能替换父类 对象 且逻辑不变。 反对子类重写父类方法。 子类可以扩展父类的功能,但不能改变父类原有的功能。
7.合成(组合)/聚合复用原则
定义
和开闭原则相反提倡一个类来管理

