一、单一设计原则(Single Responsibility Principle,SRP)
定义:
一个类应该只有一个引起变化的原因,或者说一个类应该只有一个责任。
关键思想:
- 一个类应该专注于一种类型的任务,只有一个责任;
- 一个类应该只有一个原因引起它变化。
二、里氏替换原则(Liskov Substitution Principle,LSP)
定义:
如果对于每一个类型为 S 的对象 o1,都有类型为 T 的对象 o2,使得以 T 定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 S 是类型 T 的子类型。
任何基类可以被其子类替代,而程序仍然能够保持正确性。换句话说,子类应该能够替代其基类而不引起程序错误。
关键思想:
- 子类型必须能够替代基类型,而程序的行为不会发生变化。
- 子类型应该继承基类型的行为,并且能够按照期望使用。
三、迪米特原则(Law of Demeter,LoD)
迪米特原则也被称为最少知识原则(Principle of Least Knowledge,PLK)或者直接调用原则(Least Knowledge for Law of Demeter,LKP),是面向对象设计中的一个原则,其核心思想是降低类之间的耦合度,减少对象之间的相互依赖。
定义:
一个对象应该对其他对象保持最少的了解。具体来说,一个类不应该直接调用其他类的内部方法,而是通过它自己的方法或者通过传递给它的对象来完成某项操作
关键点:
- 一个对象应该对其他对象有最少的了解。
- 类与类之间应该尽量减少耦合。
- 不要直接访问其他对象的内部成员,而应该通过该对象提供的公共方法来进行间接访问。
四、依赖倒置原则(Dependency Inversion Principle,DIP)
定义:
高层模块不应该依赖于低层模块,两者都应该依赖于抽象。
抽象不应该依赖于细节,细节应该依赖于抽象。
这意味着在设计系统时,应该避免高层次模块(比如模块的业务逻辑)依赖于低层次模块(比如数据库操作或具体实现类),而应该依赖于抽象,即接口或抽象类。这样可以使系统更加灵活,易于扩展和维护。
关键点:
- 高层次的模块(例如业务逻辑)不应该依赖于低层次的模块(例如具体实现),两者都应该依赖于抽象(接口或抽象类)。
- 抽象不应该依赖于具体的实现,具体的实现应该依赖于抽象。
五、接口隔离原则(Interface Segregation Principle,ISP)
定义:
接口隔离原则是面向对象设计中的一条原则,它强调一个类不应该强制依赖它不使用的接口。具体来说,一个类对其他类的依赖关系应该建立在最小的接口集上。
关键点:
- 一个类不应该被迫依赖它不使用的接口。
- 客户端不应该被迫依赖它不使用的方法。
这两点意味着接口设计应该精简,只包含客户端需要的方法,避免将不相关的方法强行放在同一个接口中。
六、开闭原则(Open/Closed Principle,OCP)
定义:
开闭原则是面向对象设计中的一个基本原则,它由勃兰特·梅耶(Bertrand Meyer)提出,并由罗伯特·C·马丁(Robert C. Martin)进一步发扬光大。该原则的定义是:
软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
这意味着一个软件实体可以通过扩展来应对新的行为需求,而不需要修改已有的代码。这可以通过抽象和接口实现,以确保对于新增功能的引入,不需要修改现有的代码,而是通过扩展来实现。
关键点:
- 对扩展开放: 新的功能应该通过新增代码而不是修改已有代码的方式引入。
- 对修改关闭: 已有的代码在引入新的功能时不应该被修改,以确保稳定性。
Credits
六大设计原则举例说明:https://blog.csdn.net/qq_45165610/article/details/136027921