趣解设计原则之单一职责(论一个小老板的发家史)

news2024/12/24 3:55:41

一、前言

今天我们来聊一聊设计原则中的单一职责,还是按照惯例,先介绍一下含义,然后呢,我们再来讲一个小故事。

单一职责(SRP:Single Reposibility Principle)的定义:

一个类或者模块只负责完成一个职责。

二、小故事

今天登场的主角,是一个叫阿明的小老板,他从小就经商,很有头脑。他经营着一家月饼店,当然,这家月饼店,也是从他祖父那一辈传下来的。

image.png

他家月饼品质很好,干净卫生、用料考究、童叟无欺,所以整个镇子里的人都爱去他家买月饼。随着互联网的发展,他家的月饼名声已经不局限于当地小镇了,国内其他地区的订单也越来越多。

产量严重不足!这是一个让阿明焦虑且急需解决的问题。但是,月饼从和面制馅包馅成型烘焙这一系列操作流程中,每一个环节都很重要,所以要培养一名合格的月饼工人培训周期大概也需要3个月左右,并且还会有一批不符合上岗能力的人被淘汰掉,这可就成为了限制阿明公司发展的障碍了。

那该怎么办呢?正在他愁眉不展的时候,他的高中同学,现在大学任教的小明给他一个建议,为什么要让一个月饼工人把所有操作环节都学会呢?为什么不每个人只专注一种工作?

 

“哎?对呀!”,这样每个人只学会一项技能,不仅仅培训时间更短了,而且学习难度也大大减小了。然后阿明就招收了100名年轻人,做出了如下安排:

  • 20人去学和面
  • 20人去学制馅
  • 20人去学包馅
  • 20人去学成型
  • 20人去学烘焙

按照这种安排,原本要学习3个月的培训时间被缩短为2周,而且由于只学习一种能力,几乎没有人被淘汰!

就这样,阿明的流水线工厂也建立起来了!大家干得热火朝天,阿明的月饼供销全国,成为了远近闻名的企业家。

三、总结

通过上面的一个故事,大家可以看到,从之前一个员工要负责和面制馅包馅成型烘焙这一系列流程操作,到后来只负责其中的一件事,这其实就是单一职责原则了。

除了可以提高生产力之外,还有一个非常重要的点就是——可替换性;我们假设其中有某位工人要离职不干了,那么他之前是负责包馅的,我们只需要再培训一个包馅的员工补充上去即可。而如果是一个全流程都要负责的员工离职了,这个培训和替换的代价就非常大了。

其实在我们开发和架构上,也是这样的。从之前的单体架构,再到现在的微服务架构,我们会发现,服务的粒度越来越小,这样的主要好处就是,如果某个“微服务”出现了异常或者需要升级替换,对整个系统的影响也不会很大

我们再举一个例子,比如我们家里配了一个台式机,之前呢,就是有上网和看电影的需求而已,后来呢,我们发现,新出了一款3A大作游戏,特别好玩,但是我们电脑的配置运行不了这款游戏,那我们该怎么办呢?重新买一台电脑吗?大可不必~ 我们其实只要针对显卡进行升级即可(买一块高性能的显卡,替换旧的显卡),这样,就可以满足我们玩3A大作的需求了。

每个电脑组件各司其职。如果要升级,可以针对某一模块组件升级,而不用影响到整台电脑。而且是基于接口开发,可以扩展更换不同的实现类。

所以,综上所述,接口一定要尽量做到单一职责。类的设计不应该大而全,要设计粒度小功能单一的类。如果一个类中存在多个不相干的功能,那么我们就违背了单一职责原则,应该将它拆分成多个功能单一、粒度更新的类。

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/912031.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

static的使用

static的使用 在C语言中,static是一个关键字,用于指定变量、函数和代码块的作用域和生命周期。 用法: 静态变量 1.修饰变量:使用static关键字声明的变量是静态变量,它们的作用域被限制在定义它们的源文件中&#x…

SRE 与开发的自动化协同 -- 生产环境出现 bug 自动生成异常追踪

简介 生产环境 bug 的定义:RUM 应用和 APM 应用的 error_stack 信息被捕捉后成为 bug。 以 APM 新增错误巡检为例,当出现新错误时,在观测云控制台的「事件」模块下生成新的事件报告,捕捉为 bug。同时利用 Dataflux Func 创建异常…

一篇文章带你认识重构

文章目录 一、重构的目的:为什么要重构(why)?二、重构的对象:到底重构什么(what)?三、重构的时机:什么时候重构(when)?四、重构的方法…

Transformer在医学影像中的应用综述-分类

文章目录 COVID-19 Diagnosis黑盒模型可解释的模型 肿瘤分类黑盒模型可解释模型 视网膜疾病分类小结 总体结构 COVID-19 Diagnosis 黑盒模型 Point-of-Care Transformer(POCFormer):利用Linformer将自注意的空间和时间复杂度从二次型降低到线性型。POCFormer有200…

Unscreen-AI自动删除视频背景工具 无需绿屏

Unscreen是什么 Unscreen是一款AI自动删除视频背景工具,可以帮你把视频和GIF中的背景去除,目前支持的格式:.mp4、.webm、.ogg、.ogg、.ogv、.mov、.gif,用户不需要手动选择像素、颜色和掩码,而是使用AI 自动分析视频&…

ms-tpm-20-ref构建脚本说明

bootstrap 这个脚本主要做了以下几件事情: 1. 设置环境变量:将 AUTORECONF 环境变量设置为 autoreconf,如果该变量已经定义,则不会进行重新设置。 2. 生成文件列表:通过 src_listvar 函数生成各个目录下的源文件列表&…

易云维智慧实验室综合管理平台以技术赋能和数据驱动,助力实验室设备集中管控和能耗管理

目前,我国实验室存在纸质记录多、信息孤岛、不可追溯、安全隐患多、运行能耗高、管理难等问题;同时,国内LIMS实验室信息系统专业化程度低,功能结构单一,不能满足现阶段实验室管理需要;构建一个基于物联网技…

macOS M1使用TensorFlow GPU加速

本人是在pycharm运行代码,安装了tensorflow版本2.13.0 先运行代码查看有没有使用GPU加速: import tensorflow as tf# Press the green button in the gutter to run the script. if __name__ __main__:physical_devices tf.config.list_physical_dev…

Leetcode每日一题:849. 到最近的人的最大距离(2023.8.22 C++)

目录 849. 到最近的人的最大距离 题目描述: 实现代码与解析: 双指针 原理思路: 849. 到最近的人的最大距离 题目描述: 给你一个数组 seats 表示一排座位,其中 seats[i] 1 代表有人坐在第 i 个座位上&#xff0c…

jQuery Editable Select可搜索下拉选项框

前言 可搜索的下拉选项框 源码地址:https://github.com/indrimuska/jquery-editable-select 可搜索的下拉选项框 引入依赖 <script src"//code.jquery.com/jquery-1.12.4.min.js"></script> <script src"//rawgithub.com/indrimuska/jquery…

CentOS中Oracle11g进程有哪些

最近遇到Oracle数据库运行过程实例进程由于某种原因导致中止的问题&#xff0c;专门看了下正常Oracle数据库启动后的进程有哪些&#xff0c;查阅资料了解了下各进程的作用&#xff0c;记录如下。 oracle 3032 1 0 07:36 ? 00:00:00 ora_pmon_orcl oracle …

数据结构——线性数据结构(数组,链表,栈,队列)

文章目录 1. 数组2. 链表2.1. 链表简介2.2. 链表分类2.2.1. 单链表2.2.2. 循环链表2.2.3. 双向链表2.2.4. 双向循环链表 2.3. 应用场景2.4. 数组 vs 链表 3. 栈3.1. 栈简介3.2. 栈的常见应用常见应用场景3.2.1. 实现浏览器的回退和前进功能3.2.2. 检查符号是否成对出现3.2.3. 反…

“解放 Arweave“优惠:4EVERLAND的无缝上传教程

为了进一步展示 Arweave 的能力&#xff0c;4EVERLAND 骄傲地推出了“解放 Arweave”活动。我们认识到 Arweave 在数据完整性、抗审查性以及长期保存方面的无与伦比的优势&#xff0c;因此我们与这个去中心化的存储巨头建立了强大的集成。 克服了过去与加密货币支付逻辑相关的…

2023网络建设与运维模块三:服务搭建与运维

任务描述: 随着信息技术的快速发展,集团计划2023年把部分业务由原有的X86架构服务器上迁移到ARM架构服务器上,同时根据目前的部分业务需求进行了部分调整和优化。 一、X86架构计算机操作系统安装与管理 1.PC1系统为ubuntu-desktop-amd64系统(已安装,语言为英文),登录用户…

半导体市场遇寒冬,“热停机”成为新趋势 | 百能云芯

半导体制程市况不佳&#xff0c;晶圆代工商降价效果差。为削减成本&#xff0c;韩国主要代工厂如三星&#xff0c;启用“热停机”策略。此趋势蔓延至联电、世界先进、力积电等台湾代工厂&#xff0c;揭示短期订单前景黯淡&#xff0c;制程市况严峻。 据韩媒&#xff0c;三星、K…

console的几个常用用法

console.log() 其一、主要表示&#xff1a;向 Web 控制台输出一条消息; 其二、而具体是什么信息就以传递的实参为准&#xff0c;然后就是在控制台就能显示自己传递参数的结果&#xff1b; console.log([1,3,5,7]) // 输出 [1, 3, 5, 7] console.log({}) // 输出 {} conso…

*看门狗原理及注意事项

1.看门狗的作用是&#xff1a;当单片机因为软硬件问题或者外界干扰导致死机时&#xff0c;可以自动复位单片机&#xff0c;使系统重新正常工作。 当电脑的系统死机了&#xff0c;我们可以人为手动的进行重启&#xff0c;使电脑重新正常工作。但当火星的单片机系统死机了&#x…

无人机电力巡检:探索电力设施维护的新模式

电力巡检一直是电力行业中关键的环节&#xff0c;它的目的是确保电力设施的正常运行和安全稳定&#xff0c;对提高电力设施的可靠性、确保电力供应的稳定性和提高电力企业的管理水平具有重要的意义。传统的电力巡检方式通常采用人工的方式进行&#xff0c;这种方式存在很多的问…

Win10c盘满了怎么清理?快速清理,5个方法!

“快救救孩子吧&#xff01;我的电脑是win10系统的&#xff0c;现在c盘满了&#xff0c;根本没法继续使用电脑了。怎么才能快速的释放内存呢&#xff1f;非常着急&#xff01;感谢大家&#xff01;” C盘是Windows系统中重要的分区&#xff0c;当其存储空间满了&#xff0c;可能…

C++核心编程——类和对象(二)、友元、多态

C对象模型和this指针 4.3.1 成员变量和成员函数分开存储 在C中&#xff0c;类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 空类&#xff08;类里面是空的&#xff09;&#xff0c;空对象占用内存空间为&#xff1a;1字节。 静态成员变量&#xff0…