Spring5核心源码
第1章 软件架构设计原理
1.1 开闭原则(Open-Close Principle,OCP)
针对扩展开放、对修改关闭 JavaDiscountCourse→JavaCourse→ICourse
1.2 依赖倒置原则(Dependence Inversion Principle,DIP)
高层模块不能依赖底层模块,二者都不能依赖其抽象。抽象不能依赖细节,细节应该依赖抽象。目的就是减少耦合。
1 | 2 | 3 |
---|---|---|
参数注入方法 | 构造器方法 | Setter方法 |
以抽象为基准比以细节为基准搭建起来的架构要稳定的多。
1.3 单一职责原则(Simple Responsibility Principle,SRP)
不要存在多于一个导致类变更的原因。
1.4 接口隔离原则(Interface Segregation Principle,ISP)
使用多个专用接口,而不使用单一总接口,客户端不应该依赖它不需要的接口。
序号 | 要求 | 核心要点 |
---|---|---|
1 | 一个类对另一个类的依赖应该建立在最小接口之上 | 最小接口 |
2 | 建立单一接口,不要建立庞大臃肿的接口 | 精简接口 |
3 | 尽量细化接口,接口中的方法尽量少 | 细化接口 |
高内聚、低耦合的设计思想,使类具有可读性、扩展性和可维护性。
1.5 迪米特原则(Law of Demeter,LoD)
一个对象应该对其他对象保持最少的了解,又叫最少知道原理(Least Knowledge Principle,LKP),尽量降低类与类之间的耦合度。 迪米特原理强调只和朋友交流,不和陌生人说话。
1.6 里氏替换原则(Liskv Substitution Principle,LSP)【困难!!!】
一个软件实体如果适用于一个父类,那么一定适用于其子类,所有引用父类的地方必须能透明地使用其子类的对象,子类对象能够替换父类对象,二程序逻辑不变。
优点:
①约束继承泛滥,是一种开闭原则的体现;
②加强程序的健壮性,同时变更时也可以做到很好的兼容性,提高程序的可维护性和扩展性,降低需求变更时引入的风险。
1.7 合成复用原则(Composite/Aggregate Reuse Principle,CARP)
尽量使用对象组合(has-a)/聚合(contanis-a)而不是继承关系达到软件复用的目的。 继承叫做白箱复用,组合/聚合相当于黑箱复用。