单一职责原则(Single Responsibility Principle SRP)

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

什么意思呢?

所谓单一职责原则就是一个类只负责一个职责,只有一个引起变化的原因。

如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化会削弱或抑制这个类完成其他职责的能力,这个耦合会脆弱的设计。

软件设计真正要做的许多内容,就是发现职责并把这些职责相互分离;如果能够想到多于一个动机去改变一个类,那么这个类就具有多于一个职责,就应该考虑类的分离。

以调制解调器为例如下图:

                                

从上述类图里面我们发现有四个方法Dial(拨通电话),Hangup(挂电话),Receive(收到信息),Send(发送信息),经过分析不难判断出,实际上Dial(拨通电话)和Hangup(挂电话)是属于连接的范畴,而Receive(收到信息)和Send(发送信息)是属于数据传送的范畴。这里类包括两个职责,显然违反了SRP。

这样做有潜在的隐患,如果要改变连接的方式,势必要修改Modem,而修改Modem类的结果导致凡事依赖Modem类可能都需要修改,这样就需要重新编译和部署,不管数据传输这部分是否需要修改。

因此要重构Modem类,从中抽象出两个接口,一个专门负责连接,另一个专门负责数据传送。依赖Modem类的元素要做相应的细化,根据职责的不同分别依赖不同的接口。如下图:

                

这样以来,无论单独修改连接部分还是单独修改数据传送部分,都彼此互不影响。

总结单一职责优点:

降低类的复杂性,

提高可维护性

提高可读性。

降低需求变化带来的风险。需求变化是不可避免的,如果单一职责做的好,一个接口修改只对相应的实现类有影响,对其它的接口无影响,这对系统的扩展性和维护性都有很大的帮助。

转载于:https://www.cnblogs.com/mamxfx/p/7148055.html

面向对象设计原则之一:单一职责原则相关推荐

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

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

  2. C# 实例解释面向对象编程中的单一职责原则

    在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解.灵活和可维护.这些原则是由美国软件工程师和讲师罗伯特·C·马丁(Robert Cecil Martin)提出的许多原 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Collections.sort()自定义排序方式
  2. 空集的cardinality是0
  3. 如何突破瓶颈又释放工作量? 深度剖析《闪耀暖暖》游戏从2D到3D的美术开发过程
  4. 什么是长期存储在计算机外存上的有结构,数据库是长期存储在计算机主存内
  5. 串口服务器常见异常情况排除方法介绍
  6. python运行别人的项目_pycharm实现在虚拟环境中引入别人的项目
  7. 数据库的相关概念 1006
  8. 动态规划入门之国王的金矿
  9. ODrive踩坑(一)windows下使用环境的搭建,odrivetool及USB驱动的安装
  10. 公开课视频-《第01章 规划》-大企业云桌面部署实战-在线培训-视频(奉献)
  11. kubernetes多节点集群搭建过程分析
  12. phpstudy下载、安装、配置、网站部署
  13. 单片机常用外设驱动电路
  14. 纯java写2D格斗游戏(一)——界面背景设置及人物的简单设置
  15. 安装、配置 Java JDK 和 JRE,并卸载自带 OpenJDK
  16. 2021年五大电子邮件威胁与零日漏洞
  17. canal_deployer、canal_adapter碰到的问题
  18. Dubbo 正式支持 Spring 6 Spring Boot 3
  19. 【小李木耳】2012年5月高兴事:哈尔滨集散中心成立、商标正式申请!
  20. A Game of Thrones(78)

热门文章

  1. m 文件 dll matlab 中调用_Java与MatLab混编
  2. java递归方法调用自己_java – 同步方法调用自身递归 这破了吗
  3. shell去掉字符两端字符_Shell脚本8种字符串截取方法总结
  4. Grafana Labs 携手阿里云,将提供国内首款 Grafana 托管服务
  5. 学php需要哪些基础,学习php需要什么基础?(附php学习路线图)
  6. php 怎么打印条形码,php – 如何在垂直标签中垂直打印zpl条形码
  7. c# 通过字体对话框获取字体名称和字体大小_PS插件神器 :fonTags,超好用的PS字体管理插件(附安装方法)
  8. 河北职称计算机2012试题,2012年河北省职称计算机考试试题及答案.doc
  9. python批量生成,用python批量生成简单的xml文档
  10. 贵港天气预报软件测试,贵港天气预报15天