单一设计原则
- 定义:一个类负责一项职责
- 优点:
可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;
提高类的可读性,提高系统的可维护性;
变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。 - 问题:类P在最初设计的时候是遵从单一原则的,后来由于某种原因导致需求变更,需要将类P的职责细分为粒度更低的P1、P2,这个时候就会面临拆分类P或者不拆分两种选择,如果不拆分则会违反单一职责的原则,具体要看实际情况进行处理。
里氏替换原则
- 定义:父类出现的地方可以完全用子类来替换,父类不能拥有比子类更多的功能。子类可以扩展父类的功能,但不能改变父类原有的功能。里氏替换原则核心在于继承和多态。
- 优点:子类如果覆盖父类原有的方法,在代码逻辑稍微复杂的时候,容易造成代码运行“失控”,因为这相当于修改了父类的原有功能。如果有这种需求,可以将父类的该方法定义成抽象的。
依赖倒置原则
- 定义:高层模块不应该依赖底层模块,二者都应该依赖抽象;抽象不应该依赖细节,细节应该依赖抽象。其核心思想在于面向接口编程,当高层模块依赖于几个功能相似的类时,应该将这几个相似的类抽象出来,直接依赖于该抽象。
接口隔离原则
迪米特原则
- 定义:一个对象应该对其他对象保持最少的了解。迪米特法则的初衷是降低类的耦合,类与类之间是有耦合关系的,在全局变量、方法参数、方法返回值里出现的类我们称之为直接朋友,在局部变量里通过“直接朋友”获取到的类称为间接朋友,迪米特原则就是为了避免出现间接朋友,应该将对间接朋友的操作封装到该“直接朋友”的内部。
开闭原则
- 定义:对修改关闭,对扩展开放,。即软件需要变化时,应尽量通过扩展来实现变化,而不是通过修改现有代码来实现。只要做好上面5种原则,那么设计出来的程序就是符合开闭原则的。