面向对象五大原则
单一职责 SRP
一个类做好一件事,只有一个引起它变化的原因
这个得从 高内聚低耦合 说起
- 内聚:从功能角度度量模块内的联系,一个好的内聚模块应该恰好只做好一件事,描述的是模块内的功能联系
- 耦合:是各个模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度
通常情况下的 单一职责,就是指类只有单一功能,不要为类实现多个功能点
举个例子,比如说实现一个计算器类,那么大家一般会分别实现加减乘除的方法,但是为了保证单一职责,所以就将加减乘除分别封装成类然后继承于计算器类,后面要新增功能的时候就直接继承即可。
开放封闭原则 OCP
软件实体应该是可扩展且不可修改的 ==对扩展开放,对修改封闭==
- 对扩展开放:当有新的需求变化,可以对现有代码扩展
- 对修改封闭:意味着类一旦设计完成,就可以独立完成其工作 ,而不要对其进行任何尝试的修改
(面向接口/抽象类编程)
里氏替换原则 LSP
子类必须能够替换其基类
接口隔离原则 ISP
使用多个小的专门的接口,不要使用一个大的总接口.接口应该内聚,避免"胖"接口,一个类对另外一个类的依赖应该建立在最小的接口上,不要强迫依赖不用的方法造成接口污染.
将胖接口拆分为多个具体的定制化方法,使得客户端仅仅依赖于他们调用的实际方法,避免依赖用不到的方法.
分离接口的手段:
- 委托分离,通过增加一个新的类型来委托客户的请求,隔离客户和接口的直接依赖;但是会增加系统的开销
- 例子:Controller层和Service层,以及自己实现的RedisUtil等等
- 多重继承分离,通过接口多继承来实现客户的需求
依赖倒置原则 DIP
程序要依赖于抽象接口,而不是具体实现