1. 单一职责(Single Responsibility Principle)
- 应该有且只有一个原因引起类的变更
- 对于接口、类、方法,要求做到职责单一,变更简单(变更影响最小化)
- 在实际开发过程中,职责需要根据实际业务场景划分,很难标准化,建议控制接口方法 的数量尽可能少,避免“较大类”的出现
- 示例:用户接口,需要注册、登录、修改手机号、修改用户信息、获取短信验证码等方法,可以根据是否修改用户信息数据拆分为用户信息接口(注册、修改手机号、修改用户信息)和登录验证接口(获取短信验证码、登录)
2. 开闭原则( Open Closed Principle)
- 一个软件实体如类、模块和函数应该对扩展开放、对修改关闭
- 开闭原则是面向对象设计的精髓,要求我们在设计时能够做到”拥抱需求变化“,即在开发过程中,要考虑可能发生的需求变化,并对变化进行抽象封装,在需求变化时,能在不修改原有代码的前提下进行扩展
- 示例:实现加减法计算接口,如果不遵循开闭原则,直接定义接口ICalculator接口(包含加法、减法方法),如果有需求需要增加乘法,则需要修改ICalculator接口增加乘法方法,并修改Calculator实现类
遵循开闭原则的设计:这时增加乘法实现,只需要扩展一个乘法接口,无需修改原来的代码
3. 里氏替换(Liskov Substitution Principle)
- 子类能够完全替换父类,所有父类出现的地方,都可以使用子类替换
- 示例:Person类调用Animal抽象类的eat()方法,Dog类和Cat类都重写了eat()方法,在Animal出现的地方,都可以使用Dog、Cat类的对象替换
4. 赖倒置( Dependence Inversion Principle)
- 高层模块不应该依赖底层模块,两个都应该依赖抽象
- 抽象不应该依赖细节,细节应该依赖抽象
5. 迪米特法则( Law of Demeter)
- 最少知识原则
- 类间解耦、弱耦合
- 示例: personA调用persionB,persionB中使用了personC实例,只需要在personB中依赖persionC,不需要在personA中声明personC使用personB调用
6. 接口隔离原则(Interface Segregation Principle)
- 客户端不应该依赖它不需要的接口
- 类间的依赖关系必须建立在最小的接口上
- 和单一职责原则在实现上有共通之处,单一职责在业务上保证接口的“纯洁性”,接口隔离原则在调用关系/模块依赖上保证接口的“纯洁性”