七大设计原则
名称 | 英文名称 | 简称 |
---|---|---|
单一职责原则 | Single Responsibility Principle | SRP |
里氏替换原则 | Liskov Substitution Principle | LSP |
依赖倒置原则 | Dependence Inversion Principle | DIP |
开闭原则 | OPen Closed Priciple | OCP |
接口隔离原则 | Interface Segregation Principle | ISP |
迪米特法则 | Law of Demete | LOD |
组合/聚合复用原则 | Composite/Aggregate Reuse Principle | CRP |
1. 单一职责原则
描述: 一个方法只干一件事,一个类只干一件事,甚至一个模块专注于一件事。
特点: 一个类 一个方法被修改的机率很大,如果一个方法或者类中有好几个功能相互关联,修改一个功能会带来其他功能的变动, 因此在实现的过程中一个类或者一个方法因该只专注于做好一件事情,降低功能之间的关联。(高内聚,低耦合)
2.里氏替换原则
描述: 任何父类出现的地方都可以透明的替换为子类。
特点: 在继承的过程中子类可以扩展其特有的方法属性,但尽量不要重写父类的方法,继承给程序的设计带来了变利,但也带来的弊端,降低了类的可移值性,增加了对象间的耦合性,如果一个类被另外的一个类继承,那么此时修改父类必然要考虑到所有的子类会出现的故障。因此在使用继承的过程中必遵守里氏替换原则。(用来检验继承的正确性,约束继承在使用上的泛滥)
3. 依赖倒置原则
描述: 依赖于抽象, 抽象不能依赖于细节,细节应该依赖于抽象 ,高层模块不能依赖低层模块,二者都应该依赖抽象。
特点: 主要是针对接口编程, 而不是针对实现编程。通过抽象来搭建框架, 建立类和类之间的联系,减少类之间的耦合性,提高框架的扩展性,同时以便于框架的维护性
4. 开闭原则
描述: 对于扩展开放, 修改关闭
特点: 当需要一个新功能的时候我们应改首先想到的是 在这个旧的功能上扩展一个新的功能出来,而不是修改原有的旧功,如果修改原有的旧功能这样做的风险很大,可能会导致系统的瘫痪。增强了程序的扩展性,同时也降低了程序的维护性
5. 接口隔离原则
描述: 客户端的接口是分散的多个接口,而不是一个总的接口
**特点: ** 实现类不应该依赖于它不需要的接口,不要建立一个庞大且臃肿的接口,接口该改按照不同的功能或者业务尽可能的建立多个接口。注意也不能太过于的细化,这样会使设计复杂化。好处就是 避免一个接口中出现不同职责的方法,符合高内聚,低耦合的思想。
6. 迪米特法则
描述: 一个对象尽可能的少接触其他的对象,只和需要接触的对象进行接触
特点: 使用迪米特法则可以使类与类 之间的耦合降低,减少类与类之间的关联程度,让类与类之间的协作更加直接,提高了类的复用性。
7. 组合/聚合复用原则
描述: 组合或者聚合优于继承
特点: 在类的构建过程中优先考虑组合或者聚合,继承的时候父类暴露给子类的信息太多,或导致如果需要修改父类,必然要考虑到子类,这也可以提高类的复用性。