1、单一职责原则的概念

Single Responsibility Principle,SRP:

一个类被改变的原因不能超过一个,也就是说,一个类只有一个职责,如果职责过多,代码就会臃肿,可读性更差,也更难以维护。其实上单一职责原则和接口隔离原则有一定的关系,接口隔离以后,职责就单一了,实现这个接口的类的职责自然也就单一了。但是接口隔离关注的是抽象层,单一职责关注的是两者兼而有之,偏重于实现。

2、为什么要遵守单一职责原则

1、提高类的可维护性和可读写性

一个类的职责少了,复杂度降低了,代码就少了,可读性也就好了,可维护性自然就高了。

2、提高系统的可维护性

系统是由类组成的,每个类的可维护性高,相对来讲整个系统的可维护性就高。当然,前提是系统的架构没有问题。

3、降低变更的风险

一个类的职责越多,变更的可能性就更大,变更带来的风险也就越大,

3、如何遵守单一职责原则

  • 合理的职责分解

相同的职责放到一起,不同的职责分解到不同的接口和实现中去,这个是最容易也是最难运用的原则,关键还是要从业务出发,从需求出发,识别出同一种类型的职责。举个例子:人的行为分析,包括了生理、生活和工作等行为的分析,生理行为包括吃、跑、睡等行为,生活行为包括穿衣等行为,工作行为包括上下班,开会等行为,如下图所示:

图1 人类行为分析示例

人类的行为分成了三个接口:生理行为接口、工作行为接口和生活行为接口,以及三个实现类。如果都用一个实现类来承担这三个接口的职责,就会导致代码臃肿,不易维护,如果以后再加上其他行为,例如学习行为接口,将会产生变更风险(这里还用到了组合模式,以后会详细说明)。

四、最佳实践

在实际工作中,有一个经常会用到的设计模式,DAO模式,又叫数据访问对象,里面定义了数据库中表的增、删、改、查操作,按照单一职责原则,为什么不把增、删、改、查分别定义成四种接口?这是因为数据库的表操作,基本上就是这四种类型,不可能变化,所以没有必要分开定义,反而经常变化的是数据库的表结构,表结构一变,这四种操作都要跟着变。所以通常我们会针对一张表实现一个DAO,一张表就代表一种类型的职责。

设计模式:单一职责原则相关推荐

  1. 设计模式-单一职责原则

    设计模式-单一职责原则 单一职责原则使用的是创建型模式 创建型模式 创建型模式对类进行抽象 重点,创建型模式能够将对象的创建和和对象的使用分离.即使用创建型模式能够使得对象的创建,对象的使用分离.重点 ...

  2. 寂然解读设计模式 - 单一职责原则

    I walk very slowly, but I never walk backwards 设计模式 - 单一职责原则 ​ 寂然 大家好,我是寂然,本节课呢,我来给大家介绍设计模式原则之单一职责原则 ...

  3. 设计模式-单一职责原则-实践运用

    单一职责原则-概念 1.单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小. 2.单一职责原则定义如下: 单一职责原则(Single Responsibility Principle, S ...

  4. Java设计模式-单一职责原则

    单一职责原则 [Single Responsibility Principle]   定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 问题由来:类T负责两个不同的职责:职责 ...

  5. 前端中会用到的设计模式之单一职责原则

    1:设计模式应用不应用,取决于对现在和未来判断后的取舍.没必要用尽量不用! 2.设计模式的目的是  减少复杂度(一个函数中包含的功能个数), 降低耦合度(一个对象与其他对象的关系个数).耦合度不能为0 ...

  6. 学习设计模式 - 六大基本原则之单一职责原则

    设计模式总共有六大基本原则,统称为SOLID (稳定)原则,分别是S-单一职责原则(Single Responsibility Principle), O-开闭原则(Open closed Princ ...

  7. 设计模式原则--单一职责原则

    单一职责原则(SRP) 定义:就一个类而言,应该仅有一个引起它变化的原因 场景: 一个公司有3类员工,分别是 主管,程序员,销售 代码: using System; using System.Coll ...

  8. 北风设计模式课程---单一职责原则

    北风设计模式课程---单一职责原则 一.总结 一句话总结: 视频教程网上一定能找到做好笔记的博客,很大几率都不需要自己做笔记.比如北风设计模式课程,https://www.cnblogs.com/xi ...

  9. 设计模式 之 设计的 六大原则(1)单一职责原则

    由于这些原则性东西 属于概念东西,就不具体以代码描述了.以下是摘自网上和自己的一些理解 首先了解一些 面向对象的特性: 面向对象 有 三大基本特征:封装 ,继承, 多态. 封装: 也就是把客观事物封装 ...

  10. 设计模式原则篇:(1)单一职责原则--Single Responsibility Principle

    上篇文章提及到设计模式中应遵循的设计原则,并且列出了设计模式中应当遵循的六大原则. 次篇文章主要讨论单一职责原则. 单一职责原则(SRP): 不要存在多于一个导致类变更的原因.简单的讲,就是一个类或接 ...

最新文章

  1. SAP SD基础知识之SD常见流程概述
  2. C++中如何访问全局变量和全局函数
  3. [C#] 查标准正态分布表
  4. python之threading模块
  5. ABAP中将字符格式的金额转换为数值的函数
  6. innodb_flush_log_at_trx_commit配置
  7. 软件需求分析文档模板_小议管理软件需求分析
  8. 洛谷 P3183 [HAOI2016]食物链
  9. Java语言基础(4)
  10. android wchar t 中文,Android没有真正的wchar_t吗?
  11. android网易云桌面歌词,网易云怎么设置桌面歌词?
  12. Android OAID 获取 基于MSA oaid_sdk_1.0.25.zip
  13. UG装配体,打开后总显示卸载的一种可行解决办法
  14. win7计算机自动关机设置在哪里设置方法,win7电脑自动关机怎么设置_win7电脑自动关机怎么设置在哪-win7之家...
  15. Centos8 更换DNF源
  16. 区块链以及蚂蚁开放联盟链初探索
  17. 点是否在三角形内——C++实现
  18. 【JVM技术专题】 深入学习Parallel Scavenge回收器「 原理篇」
  19. 一元二次方程虚根求法java_请问怎么用C语言求一元二次方程的虚根
  20. 应届生入职半年被裁员了,我该怎么办?

热门文章

  1. SQL server中DateTime类型字段如何赋值零?
  2. 最优化课堂笔记08——非线性规划中的一些其他方法(考试你懂得)
  3. xdocument查找节点值_二叉查找树(java)
  4. 值重新赋值_JavaScript-赋值运算符
  5. python 多线程并发编程(生产者、消费者模式),边读图像,边处理图像,处理完后保存图像实现提高处理效率
  6. 在屏幕上将1234逐位打印出来1,2,3,4
  7. 解题报告:51nod 加农炮
  8. 第一个Spark程序
  9. php pcntl 多进程学习
  10. 【WP7进阶】——扩展框架组件