单一职责原则(SRP:Single responsibility principle)又称单一功能原则,你可能觉得这个原则很简单,听起来的确是这样,不就是一个类,只做一件事嘛?真的是这样吗?

这个原则的英文是:

There should never be more than one reason for  a class to change.

它的中文意思就是,一个类,只能有一个变化的原因。

单一原则要求就是不要设计大而全的类,要设计粒度小、功能单一的类。换个角度来讲就是,一个类包含了两个或者两个以上业务不相干的功能,那我们就说它职责不够单一,应该将它拆分成多个功能更加单一、粒度更细的类。

单一职责优点如下:
降低类的复杂度
提高类的可读性
提高系统的可维护性
降低变更引起的风险

听起来很容易,但是有时候,如果要把单一职责原则正确的适用起来,就不是那么简单的了。

举个例子:

我们的手机有打电话的功能,打电话需要先接通,然后通信,最后挂断。那就是三个方法,用类图来表示就是:

在使用这个功能的时候,它可能会有哪些原因导致其变动?一是打电话的时候,它的通信连接协议可能会改变,二是通信的时候,通信协议有可能会改变,这就有两个导致这个类需要变更的原因了。

而这两个需要变更的原因中, 接通电话时候的通信连接协议的改变,是通信的时候通信所需要去关注的吗?并不需要,所以我们可以说这样的设计是违反单一职责职责的,我们应该对它进行职责拆分。

比如:

通过把一个类中,处理不同事情的业务,扩展到两个接口去实现,让一个类的职责单一。

因为通常我们都是面向接口编程,这样当一个接口改变的时候,影响的只对相应的实现类有影响,对其他接口无影响。

看了这个例子后,有没有反思,我以前的设计是不是有问题,不要怀疑,你没有问题,单一原则中最难的认定的就是职责划分,因为职责是一个模糊的概念,在实际开发中,想第一张图那样设计其实也没有问题,又很简单,就把打电话划分成一个职责。但从学术上来讲,这又是不规范的,所以单一职责原则在职责划分的时候,每个人划分的职责可能都是因人而异。

除了类中的单一职责,方法也因为遵循单一职责原则,比如

  /** @description:  把参数字段的值修改,并存储到数据库* @date 2022/2/22**/void changeUser(User user, String key, String value){}

更加传递的key不同,把user中对应的key修改成指定的value,千万不要这样写,这样的方法职责不明确,做的事情太多,bug就会在里面产生

软件设计原则之单一职责原则相关推荐

  1. Java设计原则之单一职责原则、开闭原则、里氏代换原则

    文章目录 面向对象设计原则概述 单一职责原则 开闭原则 里氏代换原则 面向对象设计原则概述 软件的可维护性(Maintainability)和可复用性(Reusability)是两个非常重要的用于衡量 ...

  2. 设计原则:单一职责原则

    单一职责原则(SRP) 单一职责原则的英文是 Single Responsibility Principle,缩写为 SRP.这个原则的英文描述是这样的:A class or module shoul ...

  3. 经典设计原则:单一职责原则(SRP)

    本文详解设计原则中的单一职责原则,目的还是提高代码的可读性.可扩展性.复用性.可维护性等. 目录 1. 单一职责原则(SRP) 2. 如何理解单一职责原则? 3. 如何判断类的职责是否足够单一? 4. ...

  4. 面向对象的七种原则:单一职责原则,开放关闭原则

    我们的知识星球马上就要开始更新设计模式了,在更新设计模式之前,我们是不是需要做一些准备呢?否则设计模式中一些遵循的原则大家会一头雾水,所以我今天来给大家说一些面向对象的七种原则,有人说是6种有人说是7 ...

  5. SOLID原则:单一职责原则(SRP)

    SOLID:SOLID 原则并非单纯的1个原则,而是由5个设计原则组成,它们分别是:单一职责原则.开闭原则.里式替换原则.接口隔离原则和依赖反转原则,SOLID 由5个设计原则的头一个字母组成. 如何 ...

  6. 设计模式六大原则(一)----单一职责原则

    设计模式六大原则之[单一职则原则] 一.什么是单一职责原则 首先, 我们来看单一职责的定义. 单一职责原则,全称Single Responsibility Principle, 简称SRP. A cl ...

  7. 接口隔离原则和单一职责原则区别

    接口隔离原则和单一职责原则区别 单一职责原则是备受争议的原则,根据不同的业务逻辑,它会将系统功能模块划分成不同种类,产生多样的接口,同时每个接口尽量只包含一个功能(方法). 而产生争议的原因就是这个业 ...

  8. 设计模式---面向对象设计原则之单一职责原则

    单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小.单一职责原则定义如下: 单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领 ...

  9. 6大设计原则之单一职责原则

    单一职责原则 如果有一个用户管理类,类图如下 我想,任谁也能看的出这个接口设计的有问题,用户的属性和用户的行为没有分开,应该把用户的信息抽取成一个业务对象,把用户的行为抽取成一个业务对象,按照这个思路 ...

  10. 架构中的设计原则之单一职责原则 - 《java开发技术-在架构中体验设计模式和算法之美》...

    2019独角兽企业重金招聘Python工程师标准>>> 单一职责模式: 单一职责原则的核心思想就是:系统中的每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成. ...

最新文章

  1. 为什么batchnormalize 有效
  2. HOW TO ORDER LFT
  3. .Net Core中间件和过滤器实现错误日志记录
  4. 第八届育才杯机器人比赛_赛场、名单公布!南海区第八届“献血者杯”羽毛球公开赛“羽”你相约本周六...
  5. 2020-11-08
  6. winform 填充圆形 锯齿_Qt项目中,三种图形渐变填充方式详细总结
  7. 如何合理地建立 Mysql 索引
  8. Python中的map、zip、filter、reduce函数使用
  9. expected at least 1 bean which qualifies as autowire candidate for this depe (spring无法注入)...
  10. MYSQL索引和权限管理
  11. 淘宝商品类目查询方法怎样查看别人商品的类目淘宝类目查询工具软件
  12. 手把手教你如何建立U盘免疫文件夹
  13. ANC降噪蓝牙耳机软件工程的数学原理
  14. 技术方案的讨论过程来看化繁为简
  15. 有谁知道iphone XR的“R”到底是什么意思?答案可能会让你们无奈
  16. Android 卡顿优化之 Skipped * frames 掉帧的计算
  17. java long保留两位小数
  18. MySQL(四)Select总结及补充聚合函数及分组过滤MD5加密
  19. 计算机数字媒体计数专业好就业吗,2019数字媒体技术专业就业形势和就业方向分析...
  20. 陈老师排课软件12A(正式版)

热门文章

  1. 计算机软件3dmax在展览中的研究,关于3DMAX软件的虚拟现实技术的应用研究
  2. 最新WIN10系统封装教程2019系列(六)——常规软件安装
  3. 方波峰峰值和有效值_峰峰值,峰值,平均值,有效值的关系.pdf
  4. 四、day_03计时、关灯游戏
  5. C# 在PowerPoint中给图片添加超链接和获取图片的超链接
  6. 互联网企业安全高级指南3.9 关于ISO27001
  7. 小游戏学习--获取已发布微信小游戏源码
  8. 二维码在线生成器如何批量制作设备标牌二维码
  9. linux终端设置为管理员权限,ubuntu 中的管理员权限
  10. PHP生成二维码与识别二维码,jq生成二维码