设计模式 > 单一职责原则
SOLID原则并非单纯的1个原则,而是由5个设计原则组成的,它们分别是单一职责原则,开闭原则,里氏替换原则,接口隔离原则和依赖反转原则。
单一职责原则(SRP)
定义:一个类或者模块只负责完成一个职责(或者功能)。
从定义来看,一个类只负责完成一个职责或者功能。也就是说,不要设计大而全的类,要设计粒度小、功能单一的类。换个角度来讲就是,一个类包含了两个或者两个以上业务不相干的功能,那我们就说它的职责不够单一,应该将它拆分成多个功能更加单一、粒度更细的类。
单一职责被定义为“引起变化的原因”。如果我们有两个动机去改写一个方法,那么这个方法就具备两个职责。如果一个方法承担了太多职责,那么在需求变化过程中,需要改写的可能性就越大。
SRP 原则在很多设计模式中都有着广泛的运用,例如代理模式、迭代器模式、单例模式和装饰者模式。
举例:
在社交产品中,我们用UserInfo对象来记录用户的信息。UserInfo的设计是否满足单一职责原则。
UserInfo = {
userId: stirng,
username: string,
email: string,
telephone: string,
createTime: string,
avatar: string,
provinceOfAddress: string, // 省
cityOfAddress: string, // 市
regionOfAddress: string, // 区
// ...... 其他属性和方法
}
1、UserInfo对象包含的都是跟用户相关的信息,所有属性都属于用户这样的一个模型,满足单一职责原则
2、地址信息在UserInfo对象中,可以继续拆分成独立的UserAddress,UserInfo只保留其他信息,拆分之后更加单一。
如果在这个产品中,用户信息和其他信息一样,只是单纯展示,那么UserInfo就是合理的,如果用户的地址信息还用在电商物流中,那么最好将地址信息拆分出来,独立成用户物流信息或者叫地址信息、收获信息。
评价一个类或者对象职责是否单一,并没有非常明确、可以量化的标准。在真正的开发中,没必要过于未雨绸缪,过度设计,为了设计而设计。
何时应该分离职责
1、在ajax请求的时候,创建xhr对象和发送xhr请求几乎总是在一起的,那么创建xhr和发送xhr的职责就没必要分开
2、职责的变化轴线仅当它们确定变化时才有意义,即使两个职责已经耦合在一起,但它们还没有改变的征兆,没必须主动分离,在重构的时候分离也不迟。
违反SRP原则
比如jQuery中attr方法,明显违反了SRP原则。jQuery的attr方法非常庞大,即负责取值,又负责赋值。但是对于用户来说,简化了用户的使用。
SRP优缺点
优点:降低了单个类或者对象的复杂度,按照职责把对象分解成更小的粒度,有助于代码的复用,也有利于进行单元测试。当一个职责需要变更的时候不会影响其他的职责。
缺点:增加代码的复杂度。当我们按照职责把对象分解成更小的粒度之后,实际上也增大了这些对象之间相互联系的难度。
设计模式 > 单一职责原则的更多相关文章
- C#软件设计——小话设计模式原则之:单一职责原则SRP
前言:上篇C#软件设计——小话设计模式原则之:依赖倒置原则DIP简单介绍了下依赖倒置的由来以及使用,中间插了两篇WebApi的文章,这篇还是回归正题,继续来写写设计模式另一个重要的原则:单一职责原则. ...
- 【设计模式六大原则1】单一职责原则(Single Responsibility Principle)
http://blog.csdn.net/zhengzhb/article/category/926691/1 图片素材来源,java学习手册 ps.内容为自己整理 定义:不要存在多于一个 ...
- 设计模式之单一职责原则(SRP)
自己之前写过一些关于设计模式的博客,但是大部分都写得比较匆忙.现在正好趁年前有时间,笔者打算好好地整理一下自己这块知识结构.开篇的第一个原则就是设计原则里面最简单的一个原则--单一职责原则. 想必大家 ...
- 《javascript设计模式与开发实践》--- (单一职责原则)
看的这本书叫<JavaScript设计模式与开发实践> 先规划一下看书的顺序,基础知识我已经大概的浏览了一遍了,没有留下笔记,以后有时间还会补上.本来打算顺着看的.但是我感觉我很难短时间内 ...
- 设计模式笔记:单一职责原则(SRP, Single Responsibility Principle)
1. 单一职责原则核心思想 一个类应该有且只有一个变化的原因. 2. 为什么引入单一职责原则 单一职责原则将不同的职责分离到单独的类,每一个职责都是一个变化的中心. 在SRP中,把职责定义为变化的原因 ...
- ZT 设计模式六大原则(1):单一职责原则
zt 设计模式六大原则(1):单一职责原则 分类: 设计模式 2012-02-21 09:52 25059人阅读 评论(65) 收藏 举报 设计模式stringclass编程 (THERE SHOUL ...
- 设计模式六大原则(一):单一职责原则(Single Responsibility Principle)
单一职责(SRP)定义: 不要存在多于一个导致类变更的原因,通俗的说,即一个类只负责一项职责. 问题由来: 类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可 ...
- 北风设计模式课程---单一职责原则(Single Responsibility Principle)
北风设计模式课程---单一职责原则(Single Responsibility Principle) 一.总结 一句话总结: 一个类应该有且只有一个变化的原因:单一职责原则(SRP:Single Re ...
- java设计模式学习笔记--单一职责原则
单一职责原则注意事项和细节 1.降低类的复杂度,一个类只负责一项职责 2.提高可读性,可维护性 3.降低变更引起的风险 4.通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单 ...
- 深入浅出系列第一篇(设计模式之单一职责原则)——从纯小白到Java开发的坎坷经历
各位看官大大们,晚上好.好久不见,我想死你们了... 先说说写这个系列文章的背景: 工作了这么久了,每天都忙着写业务,好久没有好好静下心来好好总结总结了.正好这段时间公司组织设计模式的分享分,所以我才 ...
随机推荐
- 诗词API
1.js依赖 /** * 今日诗词V2 JS-SDK 1.2.2 * 今日诗词API 是一个可以免费调用的诗词接口:https://www.jinrishici.com */ !function(e) ...
- Flutter异常监控 - 肆 | Rollbar源码赏析
一. Rollbar可以帮你解决哪些问题 无特别说明,文中Rollbar统指Rollbar-flutter 1. 代码复用 Rollbar官方文档说是纯Dart实现,该特征意味着自带"代码复 ...
- 聊聊web漏洞挖掘第一期
之前写2022年度总结的时候,有提到要给大家分享漏洞挖掘技巧.这里简单分享一些思路,更多的内容需要大家举一反三. 文章准备昨晚写的,昨天晚上出去唱歌,回来太晚了,耽搁了.昨天是我工作的last day ...
- 《机器人SLAM导航核心技术与实战》第1季:第4章_机器人传感器
<机器人SLAM导航核心技术与实战>第1季:第4章_机器人传感器 视频讲解 [第1季]4.第4章_机器人传感器-视频讲解 [第1季]4.1.第4章_机器人传感器_惯性测量单元-视频讲解 [ ...
- AIGC 很火,想微调个自己的模型试试看?(不是卖课的)
去年,我们发布过一篇关于 DreamBooth 编程马拉松的活动通知,获得了全球社区的广泛关注和参与,中国社区的成员们也对这个活动有非常高的热情.同时我们也收到了后台留言反馈说参与活动需要使用的 Go ...
- 穿透的switch语句-循环概述与基本组成部分
穿透的switch语句 在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运 行,直到遇到break,或者整体switch结束. pu ...
- spring-in-action-初识反应式编程reactor
一:反应式编程 1.反应式编程的优点 1)无阻塞 2)处理的数据可以是无限的 打水仗: 命令式编程:使用的是水气球.水气球的容量有限.把水气球装水,再扔向对方.如果想要更多的水,就需要更多的水气球. ...
- el-transfer 数据量过大加载慢卡顿解决办法:el-transfer虚拟滚动懒加载的实现
参考链接 1)https://github.com/GreenHandLittleWhite/blog/issues/152)https://github.com/GreenHandLittleWhi ...
- ROS入门:服务
服务端实现一个加法,将结果反馈给客户端 客户端将要计算的和的两个数发给服务的. 1.自定义服务数据 创建一个srv文件:AddTwoInts.srv int64 a int64 b --- int64 ...
- 学习Java Day29
今天学习了类的设计技巧: 1.一定要保证数据私有 2.一定要对数据初始化 3.不要在类中使用过多的基本类型 4.不是所有的字段都需要单独的字段访问器和字段更改器 5.分解有过多职责的类 6.类名和方法 ...