单一职责原则定义

一个类、接口、方法只负责一项职责,不要存在多于一个导致类变更的原因

这个原则指出对象不应该承担太多职责,如果一个对象承担了太多的职责,会至少存在以下两个缺点:

  1. 一个职责的变化可能会削弱或者抑制这个类实现其他职责的能力;
  2. 当客户端需要该对象的某一个职责时,不得不将其他不需要的职责全都包含进来,从而造成冗余代码或代码的浪费。
优点:

使用好单一职责原则,可以降低类的复杂度,提高类的可读性,提高系统的可维护性,降低因变更参数引起的风险等。但使用单一职责原则也不是任何情况下都追求完全的遵守。该原则适用于类也适用于方法。

我们以一个方法级别的例子来理解

例子为假设我们对一门新课的直播课和录播课进行不同的加密或其他操作,如果仅输出是否是直播课或录播课,一个类中判断没问题,如果进行加密或权限其他操作,则要遵循单一职责原则,拆分到不同的类中分别处理,会使代码更简洁更易读。

public class Course {public void study(String courseName){if ("直播课".equals(courseName)){System.out.println(courseName + "不能快进");}else {System.out.println(courseName + "可以反复观看");}}
}
public class CourseTest {public static void main(String[] args) {Course course = new Course();course.study("直播课");course.study("录播课");}
}

如果我们要对以上不同课程进行加密和加权限,则这么写后面维护起来会有问题。我们采用以下方法:将上面课程类拆分为直播课类和录播课类再分别实现

//直播课类,单一类处理单一逻辑,进行加密逻辑或其他
public class LiveCourse {public void study(String courseName){System.out.println(courseName + "不能快进");}
}
//录播课类,单一类处理单一逻辑,进行加密逻辑或其他
public class ReplyCourse {public void study(String courseName){System.out.println(courseName + "可以反复观看");}
}

其实很简单,就是每一个功能或一个小模块单独进行处理,维护起来也很容易维护

我们再举一个方法级别的例子
 public void modifyUserInfo(String userName,String Password,Boolean bool){if (){//符合某些逻辑置为truebool = true;}if (bool){//修改username相关}else {//修改password相关}}//以上方法拆分为以下方法,如果拆的不能再拆了,说明符合单一职责原则public void modifyUserName(String userName){//修改username相关}public void modifyUserName(String Password){//修改password相关}

对单一职责原则的使用也不用完全的遵照,有时候不拆分会比拆分更易读,是否使用及使用的程度需要你自己去把握,去斟酌。上面的例子不太恰当,但是大概意思的对的,理解就行了。

设计原则之单一职责原则详解相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. R语言生存分析COX回归分析实战:以乳腺癌数据为例
  2. linux安装mysql php_Linux 安装mysql和php
  3. win7配置Eclipse+Cocos2dx+android开发环境
  4. web开发要学多久,HTML表格标签,薪资翻倍
  5. element 方法返回的boolean被当成字符串了_JavaScript 原生对象、属性、方法、事件、事件参数...
  6. get_class 方法
  7. Java中的enum详细解析------Java enum 枚举还可以这么用
  8. C++类型转换运算符 static_cast,dynamic_cast,reinterpret_cast,const_cast
  9. 设计模式-第五篇之命令模式
  10. 怎么用计算机知道密码,如何用电脑看到自家路由器的密码
  11. 05 Confluent_Kafka权威指南 第五章: kafka内部实现原理
  12. 基于multisim的zcs电路仿真
  13. FAQ(常见问题解答)
  14. 移动硬盘linux双系统,在移动硬盘安装Linux(Ubuntu)双系统
  15. 使用Crucible和FishEye链接svn库时遇到尝试添加或索引存储库时出现错误-版本中不存在的问题
  16. 《谁动了我的奶酪》读后感 他人感悟
  17. linux v4l2架构分析之v4l2_ctrl_handler初始化及添加v4l2_ctrl的过程分析
  18. CAD教程:CAD联动模式的使用技巧
  19. h5页面输入框在安卓手机上被键盘挡住
  20. Kafka实时数据同步

热门文章

  1. Sigmoid函数与损失函数求导
  2. Java基础之判断语句
  3. 内网渗透:九、certutil-远程下载绕过
  4. qq和TIM都不能联网解决方法 “登陆超时,请检查你的网络或者本机防火墙设置。错误码:0x00000001”
  5. Mac - SSH配置
  6. 开源的自私行为如何让人们倦怠的;对企业开源状态的思考;等开源之道一周评论2020 07 06...
  7. JavaScript中的9种控制流语句
  8. GB28181协议之设备控制
  9. 我晕,一个低级错误导致我DEBUG两天(std::string c_str()的问题)
  10. matlab电路元件二极管,电子电路元件基础知识(3)三极管与 MOS管篇2019-02-07