单一职责原则

单一职责原则

单一职责原则的定义是:应该有且仅有一个原因引起类的变更。

没错,单一职责原则就这一句话,不懂没关系,我们举个例子。

我们以打电话为例,电话通话的时候有 4 个过程发生:拨号、通话、回应、挂机。那我们写一个接口,类图如下:

代码为:

我们看这个接口有没有问题?相信大部分同学会觉得没问题,因为平常我们就是这么写的。没错,这个接口接近于完美,注意,是"接近 "。单一职责原则要求一个接口或一个类只能有一个原因引起变化,也就是一个接口或者类只能有一个职责,它就负责一件事情,看看上面的接口只负责一件事情吗?明显不是。

IPhone这个接口包含了两个职责:协议管理和数据传送。dial 和 hangup 这两个方法实现的是协议管理,分别负责拨号接通和挂机,chat 方法实现的是数据传送。不管是协议接通的变化还是输出传送的变化,都会引起这个接口的变化。所以,IPhone这个接口并不符合单一职责原则。若要让IPhone满足单一职责原则,我们就要对其进行拆分,拆分后的类图如下:

这样设计就完美了,一个类实现了两个接口,把两个职责融合在一个类中。你会觉得这个Phone有两个原因引起变化了啊,是的,但是别忘了我们是面向接口编程,我们对外公布的是接口而不是实现类。

另外,单一职责原则不仅适用于接口和类,也适用于方法。一个方法尽可能只做一件事,比如一个修改用户密码的方法,不要把这个方法放到"修改用户信息"方法中。

单一职责的好处

  1. 类的复杂性降低,实现什么职责都有清晰明确的定义;

  2. 可读性高,复杂性降低,可读性自然就提高了;

  3. 可维护性提高,可读性提高了,那自然更容易维护了;

  4. 变更引起的风险降低,变更是必不可少的,如果接口的单一职责做得好,一个接口修改只对相应的实现类有影响,对其他的接口无影响,这对系统的扩展性、维护性都有非常大的帮助。

如果对你有帮助,就一键三连呗(点赞+收藏+关注),我会持续更新更多干货~~

相关推荐
折哥的程序人生 · 物流技术专研1 天前
Java 23 种设计模式:从踩坑到精通 | 适配器模式 —— 让不兼容的接口也能一起工作
java·设计模式·面试·适配器模式·单一职责原则
晚风予卿云月1 天前
【Java】单一职责原则
单一职责原则
折哥的程序人生 · 物流技术专研5 天前
Java 23 种设计模式:从踩坑到精通 | 原型模式 —— 克隆对象,深拷贝与浅拷贝的坑你踩过吗?
java·设计模式·架构·原型模式·单一职责原则
折哥的程序人生 · 物流技术专研6 天前
【电商多平台电子面单对接实战|第二篇】抖音代发电子面单对接:从“面条代码”到整洁架构的涅槃之路
设计模式·架构·系统架构·单元测试·代码规范·单一职责原则
我不是懒洋洋2 个月前
自动化构建工具:make与Makefile从入门到精通
简单工厂模式·接口隔离原则·依赖倒置原则·合成复用原则·单一职责原则
CPUOS20102 个月前
嵌入式C语言高级编程之单一职责原则
c语言·开发语言·单一职责原则
mxwin2 个月前
Unity URP SRP Batcher 完全指南 URP/HDRP 下的核心批处理机制,大幅降低 CPU 开销
unity·游戏引擎·shader·单一职责原则
mxwin3 个月前
Unity Shader SRP深入理解内置渲染管线与 URP/HDRP 的底层架构差异
unity·游戏引擎·单一职责原则
普通网友3 个月前
十大秘闻:揭秘霍兰德职业兴趣理论的未知面!
职场和发展·求职招聘·职场发展·单一职责原则
QUFridIM4 个月前
动力电池充电系统设计(mtalab仿真+proteus仿真+英文文献+PPT+详细过程说明书)...
单一职责原则