单一职责原则 SRP 一个类或者模块只负责完成一种职责 现在微服务还有模块的分层 就是基于这个原则
单一职责,我个人认为单一职责是一个分工合作,对于模块来说做的更精准不需要考虑其他的模块的信息,做到了一个模块小而精,对于整理来说松耦合
里氏替换原则 LSP 多用组合 少用继承
-
子类必须实现父类的抽象方法,但不得重写(覆盖)父类的非抽象(已实现)方法。
-
子类中可以增加自己特有的方法当子类覆盖或实现父类的方法时,
-
方法的前置条件(即方法的形参)要比- 父类方法的输入参数更宽松。(即只能重载不能重写)
-
当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
里氏替换原则 是基于子类对父类进行扩展,是对封装和多态的补充。因为封装和继承的要求有些复杂,所以里氏替换原则推荐我们使用组合少用继承
依赖倒置 DIP
-
下层模块引入上层模块 改变原来自上而下的依赖方式
-
类比假如你是一个演员,没有出名的时候,需要你自己去找合作。你出名以后,合作会自动找你,这种改变就叫做依赖倒置。
-
不要面向具体的对象编程 这样会造成较大的耦合。要面向抽象的接口编程
依赖倒置就是说从我去寻找他们变成他们需要我, 对上层模块进行统一管理
接口隔离原则建立单一接口
-
接口尽量细化,接口中的方法尽量少
- 接口要尽量小
- 接口要高内聚
- 定制服务
-
以人举例,如果你要实现一个人的接口,只需要提供一个基础的人作为接口 然后具体的人添加不同的具体的功能
-
比如一个接口下,同时是实现了新增和修改两个接口 这就违反了接口隔离原则
简单说就是一个接口实现一个功能
迪米特法则 最少知识原则 (只是买台咖啡机,竟然要学习咖啡的工作原理)
-
只和你的密友对话 感觉外观模式就是基于迪米特法则
-
我付完款去下单 我直接调用下单接口就应该可以实现下单功能 不需要了解下单功能里的详情
开闭原则
-
类、方法、模块应该对扩展开放 对修改关闭
-
添加一个功能应该是在已有的代码基础上进行扩展 而不是修改已有代码