文章目录

  • 1、什么是单一职责原则
  • 2. 单一职责原则的认识
  • 3. 代码案例
    • 3.1 一个正常的代码
      • 3.1.1执行结果
      • 3.1.2 分析
    • 3.2 职责扩散
      • 3.2.1 执行结果
      • 3.2.2 分析
      • 3.2.3 解决方案1:遵守类的单一职责原则
      • 3.2.4 执行结果
      • 3.2.5 分析
      • 3.2.6 解决方案2:遵守方法的单一职责原则
      • 3.2.7 分析
  • 4. 下一章:[接口隔离原则](https://blog.csdn.net/small_clear/article/details/109841799)

1、什么是单一职责原则

  • 字面理解:一个类只担任一个职责
  • 对类来说: 要么是一个用户类,要么是一个订单类,两个职责不同的类不要写在一起
    • 举例: 在开发中,我们在经常会创建操作数据的Dao类,如果在数据库表中有user表和order表,那我们就需要创建一个userDao与一个orderDao,两个dao分别用来操作不同的表业务,不要将两个不同的业务写在一个类中
  • 对于方法来说: 一个类中有很多的行为,也就是方法,那么我们就要保证一个方法只做一件事,最后将每个方法组合起来使用,不要把一大片的做了很多事的逻辑写在一个方法里,将每一件事进行细粒度的划分
  • 作用
    • 降低类的复杂度,一个类只负责一项职责
    • 提高类的可读性,可维护
    • 降低变更引起的风险
    • 通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违 反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则

2. 单一职责原则的认识

  • PS: 这一段参考于: https://www.cnblogs.com/yanggb/p/10922079.html
  • 单一职责原则看起来很简单,就跟常识一样,基本上是个程序员都知道该怎么做,但是我们有时候还是会因为职责扩散的问题违背这一原则
  • 职责扩散: 指的就是因为某种原因,职责P1被分化为粒度更细的职责P1和P2。下面会用代码举例
  • 违背原则: 假设我在A1类中调用了P1类,后来因为需求变更,P1的职责扩散了,划分为了P1与P2。那我是不是为了遵守单一职责原则,再创建一个A2类,让A1与A2分别负责P1与P2呢?如果程序已经完成了,这样做的话开销就会太大了,因为P1扩散影响到了A1,如果A1扩散是否会影响到其他的类呢?所以简单的修改P1类,让他负责两个职责,也是可以的,虽然会违背单一原则。违背单一原则,只在简单的类,简单的代码中建议使用,如果业务复杂,最好还是遵守单一职责原则。
  • 适当地违背单一职责原则有时候反而能提高开发效率,因此设计原则还是要按照实际需求来选择使用的。

3. 代码案例

3.1 一个正常的代码

public class SingleResponsibility1 {public static void main(String[] args) {Vehicle vehicle = new Vehicle();vehicle.run("汽车");}
}/*** 交通工具类*/
class Vehicle {/*** 交通工具运行的方法** @param vehicleName*/public void run(String vehicleName) {System.out.println(vehicleName + "在公路上行驶");}
}

3.1.1执行结果

汽车在公路上行驶

3.1.2 分析

  • 我们可以看到,这是一个很正常的类,调用了交通工具类的run方法,传入一个汽车,打印出来汽车在公路上行驶。但是如果发生了职责扩散呢?

3.2 职责扩散

  • 指的就是因为某种原因,职责P1被分化为粒度更细的职责P1和P2
public class SingleResponsibility1 {public static void main(String[] args) {Vehicle vehicle = new Vehicle();vehicle.run("汽车");vehicle.run("飞机"); //新增飞机运行vehicle.run("船"); //新增船运行}
}/*** 交通工具类*/
class Vehicle {/*** 交通工具运行的方法** @param vehicleName*/public void run(String vehicleName) {System.out.println(vehicleName + "在公路上行驶");}
}

3.2.1 执行结果

汽车在公路上行驶
飞机在公路上行驶
船在公路上行驶

3.2.2 分析

  • 很明显,在我们传入飞机跟船之后,程序就不正常了。飞机跟船是不能再公路上行驶的。
  • 现在这个方法不仅仅要跑公路上的,还要跑水里跟天上的,这就是职责扩散。

3.2.3 解决方案1:遵守类的单一职责原则

public class SingleResponsibility1 {public static void main(String[] args) {LandVehicle landVehicle = new LandVehicle();landVehicle.run("汽车");SkyVehicle skyVehicle = new SkyVehicle();skyVehicle.run("飞机");WaterVehicle waterVehicle = new WaterVehicle();waterVehicle.run("船");}
}/*** 地上跑的*/
class LandVehicle {/*** 交通工具运行的方法** @param vehicleName*/public void run(String vehicleName) {System.out.println(vehicleName + "在公路上行驶");}
}/*** 天上飞的*/
class SkyVehicle {/*** 交通工具运行的方法** @param vehicleName*/public void run(String vehicleName) {System.out.println(vehicleName + "在天上飞");}
}/*** 水里游的*/
class WaterVehicle {/*** 交通工具运行的方法** @param vehicleName*/public void run(String vehicleName) {System.out.println(vehicleName + "在水里游");}
}

3.2.4 执行结果

汽车在公路上行驶
飞机在天上飞
船在水里游

3.2.5 分析

  • 使用类的单一职责原则,将交通工具通过天上、地下、水里分为三个类,每个类负责处理各自领域的交通工具,实现一个类只负责一个职责
  • 优点: 降低类的复杂度、提高可维护性、修改一个类中的业务不会影响到其他的类
  • 缺点: 这么简单的逻辑与方法却要分为三个类,这样做的开销就太大了,所以我们在方法很少的类中允许违背类的单一原则,但是要遵守方法的单一职责原则

3.2.6 解决方案2:遵守方法的单一职责原则

public class SingleResponsibility1 {public static void main(String[] args) {Vehicle vehicle = new Vehicle();vehicle.runLang("汽车");vehicle.runSky("飞机");vehicle.runWater("船");}
}/*** 交通工具*/
class Vehicle {public void runLang(String vehicleName) {System.out.println(vehicleName + "在公路上行驶");}public void runSky(String vehicleName){System.out.println(vehicleName + "在天上飞");}public void runWater(String vehicleName){System.out.println(vehicleName + "在水里游");}
}

3.2.7 分析

  • 在方法足够少,逻辑足够简单的类中,如果发生职责扩散,可以允许不遵守的单一职责原则,但是一定到遵守方法的单一职责原则
  • 一个方法,只做一件事,在这里的体现就是,一个方法,只跑一个领域的交通工具

4. 下一章:接口隔离原则

1. 目标精通--用java写设计模式:单一职责原则相关推荐

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

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

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

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

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

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

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

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

  5. Java设计模式七大原则-单一职责原则

    目录 概述:设计模式的目的 设计模式七大原则 单一职责原则 单一职责原则注意事项和细节 概述:设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等 ...

  6. java设计模式1,单一职责原则

    目录 一.单一职责原则定义 二.模拟场景 三.违背原则方案 1.配置类 2.逻辑代码 3.测试类 四.单一职责原则改善代码 1.定义接口 2.实现类,普通用户 3.实现类,专属用户 4.VIP用户 一 ...

  7. java设计模式之设计原则③单一职责原则

    定义: 不要存在多于一个导致类变更的原因 一个类/接口/方法只负责一项职责 优点: 降低类的复杂度,提高类的可读性,提高系统的可维护性.降低变更引起的风险 以下通过案例进行理解单一职责原则: 创建一个 ...

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

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

  9. java 单一职责原则_设计模式之单一职责原则

    对类来说,即一个类应用只负责一项职责,如类A负责两个不同的职责:职责1,职责2.当职责1需求变更时,可造成职责2执行错误,所以需要将类A的粒度分解为A1,A2. 降低类的复杂度,一个类只负责一项职责 ...

最新文章

  1. 华为mate x2什么时候更新鸿蒙系统,华为Mate X2真机发布,今年四月可升级鸿蒙系统...
  2. 去除快捷方式中的“快捷方式”字样
  3. php框架所用到的核心概念,【PHP】PHP现代框架代表-Laravel框架核心技术特性
  4. java转换字符集_Java字符集转换解释
  5. 程序员:我们都在为错误买单!
  6. [Java] 1010. Radix (25)-PAT甲级
  7. 手机联系人分组名字都没了_艺术签名手写设计,每个名字都应该是精品,只是你没找对方法...
  8. 使用jQuery来创建平滑的页面滚动
  9. 怎么获取大量新鲜可用的迅雷白金会员账号!?
  10. 丁向荣单片机pdf_《单片机原理与应用 --基于可在线仿真的STC15F2K60S2单片机》 丁向荣、陈崇辉 【正版电子纸书阅读_PDF下载】- 书问...
  11. 引爆点 mobi_开源中的3个新兴引爆点
  12. 算法设计与分析——背包问题(Java)
  13. 凯恩斯乘数到底有多么神奇?
  14. 速腾激光雷达 xavier环境驱动配置踩坑记录
  15. android语音输入文字,盘点好用的语音输入APP,懒得打字的时候就说话吧!
  16. ad17如何生成坐标文件_pcb如何导出坐标文件
  17. Halcon标定板标定
  18. unity图片变成马赛克如何取像素并改变颜色_聊聊 2D 游戏的像素化中的问题
  19. Spring事务源码详解
  20. 利用ClaudiaIDE插件在VS中插入图片

热门文章

  1. Python:找对称数
  2. FTP协议的原理及配置
  3. 用计算机刻录光盘,刻录光盘,教您怎么用电脑将文件刻录到光盘
  4. day199-2019-01-05-英语流利阅读-待学习
  5. Kotlin拿Android本地视频缩略图
  6. 代码是如何编译成程序的?
  7. 【每天听见吴晓波-2016-07-04】上海房价未来五年还会翻番
  8. 君表增强了公式计算中的区域引用,支持SUM(A:A)
  9. [转载]形容女人的词语
  10. 电商社区怎么做?看服饰大佬如何通过粉丝圈激活客户