所谓的高内聚就是把功能相关的模块集合在一起,不要分散
低耦合就是说两个相关的模块尽可以能把依赖的部分降低到最小,不要让两个模块产生强依赖
单一职责原则 (SRP)Single Responsibility Principle
- 应该有且仅有一个原因引起类的变更。
- 简单点说,一个类,最好只负责一件事,只有一个引起它变化的原因。
举个例子: 如果一个类负责两个职责,职责 A 和职责 B,那么当职责 A 的需求发生改变而需要修改类时,可能会导致原来正常运行的职责 B 发生故障。
- 可以提高内聚性。
- 如果职责太多,可能引起类变化的原因就越多,会导致职责依赖,相互之间会产生影响,极大的破坏内聚性和耦合性。
开闭原则 (OCP) open closed principle
- 对修改关闭,对扩展开发
- 项目上线后修改源代码风险大,可能会影响现有业务,应该通过扩展功能的方式实现新需求
依赖倒置原则 (DIP)Dependence Inversion Principle。
- 高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。
- 模块之间的依赖通过抽象产生。
- 实现类依赖接口或抽象类。
- 面向接口编程。
接口隔离原则ISP Interface Segregation Principle。
接口隔离原则强调:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
- 即客户需要什么接口就依赖什么接口,不需要要的就不依赖。
- 类之间的依赖应该建立在最小接口上。
- 什么是细小接口,这就要看职责的划分。
- 可以把类似的功能放在一个接口里,类只需要实现自己需要的接口即可。
迪米特法则 LOD
迪米特法则又称为 最少知道原则,它表示一个对象应该对其它对象保持最少的了解。通俗来说就是,只与直接的朋友通信。
首先来解释一下什么是直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖、关联、组合、聚合等。其中,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的形式出现在类的内部。
对于被依赖的类来说,无论逻辑多么复杂,都尽量的将逻辑封装在类的内部,对外提供 public 方法,不对泄漏任何信息。
里氏替换原则 LSP (Liskov Substitution Principle )
所有父类出现的位置,都可以替换成子类而不影响功能,