单一职责原则:

单一职责原则注意事项和细节:

1.降低类的复杂度,一个类只负责一项职责

2.提高类的可读性,可维护性

3.降低变更引起的风险

4.通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类方法数量足够少,可以在方法级别保持单一职责原则。

案例:

1.在方式1的run 方法中,违反了单一职责原则,案例中飞机不能在公路上跑,而是在天空中飞行

package singleresponsibility;public class SingleResponsibility {public static void main(String[] args) {Vehile vehile = new Vehile();vehile.run("小汽车");vehile.run("摩托车");vehile.run("飞机");}}
//交通工具类
//方式1:
//1.在方式1的run 方法中,违反了单一职责原则
//2.解决方案非常简单,根据交通工具运行方法不同,分解成不同类即可
class Vehile{public void run(String vehicle){System.err.println(vehicle + " 在公路上跑");}
}

2.改进方案:写了三个独立的类,遵守了单一职责原则,但是这样的改动很大,即将类分解,同时修改了客户端

package singleresponsibility;public class SingleResponsibility2 {public static void main(String[] args) {RoadVehicle roadVehicle = new RoadVehicle();roadVehicle.run("汽车");AirVehicle airVehicle = new AirVehicle();airVehicle.run("飞机");WaterVehicle waterVehicle = new WaterVehicle();waterVehicle.run("潜艇");}
}
//方案2的分析
//1.遵守单一职责原则
//2.但是这样的改动很大,即将类分解,同时修改客户端
//3.改进:直接修改Vehicle类,改动的代码会比较少 ==》 方案3
class RoadVehicle{public void run(String vehicle){System.err.println( vehicle + " 在公路上运行!");}
}class AirVehicle{public void run(String vehicle){System.err.println(vehicle + " 在天上飞行");}
}class WaterVehicle{public void run(String vehicle){System.err.println(vehicle + " 在水里运行");}
}

3.再次改进方案:这种改进方案对原始的方案没有大的改动,只是增加了方法,此种方法一定成都上没有遵守单一职责原则,但是在方法级别上遵守了单一职责原则。与单一职责原则中第四条:只有类方法数量足够少,可以在方法级别保持单一职责原则。

package singleresponsibility;public class SingleResponsibility3 {public static void main(String[] args) {Vehicle vehicle = new Vehicle();vehicle.run("汽车");vehicle.runAir("飞机");vehicle.runWater("轮船");}
}
//方式3的分析:
//1.这种修改方式,没有对原来的类做大的修改只是增加了方法
//2.一定程度上没有完全(类上面)遵守单一职责原则,但是在方法级别上遵守了单一职责原则
class Vehicle{public void run(String vehicle){System.err.println(vehicle +  " 在公路上运行");}public void runAir(String vehicle){System.err.println(vehicle +  " 在天空运行");}public void runWater(String vehicle){System.err.println(vehicle +  " 在水中运行");}
}

设计模式的七大设计原则:其一:单一职责原则相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 设计模式七大原则:单一职责原则

    设计模式目的 软件设计模式(Design pattern),又称设计模式,是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证 ...

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

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

最新文章

  1. CAPSNET:具有自我注意路由的胶囊网络
  2. POJ--2104 K-th Number (主席树模版题)
  3. 玩转HTML5+跨平台开发[4] HTML表格标签
  4. ln -s 的一个坑
  5. 前端学习(1430):ajax封装五
  6. Socket实现Android客户端与服务器的通信
  7. Ansible Tower - 使用入门 4 - 用 Workflow 执行模板
  8. SPSSV20.0 下载及安装【SPSS 001期】
  9. 架构之美第四章-架构与美
  10. arduino蓝牙通讯代码_手机与Arduino蓝牙串口通讯实验及完整例程
  11. [转] 数学原理浅谈一下《黑客帝国》
  12. html文件用ppt打开,ppt文件怎么打开?ppt是什么?
  13. 影响一生的32步电影
  14. C# Predefined type 'System.Object' is not defined or imported
  15. AspNetCore.Mvc写Get方法运行显示该网页无法正常运作 http err 500问题
  16. 【单目3D目标检测】MonoFlex论文精读与代码解析
  17. 基于DS18B20数字温度传感器的温度计设计
  18. YUV 后面数字的含义_大众车尾的280、330是什么含义?好多人不懂,买车要看准了...
  19. 高光谱遥感图像处理(14)-----ENVI使用教程之监督分类与非监督分类
  20. QMS-云质说质量 - 3 来料检验的九大坑,你踩过几个?

热门文章

  1. Pandas set_indexreset_index
  2. mosquitto查看订阅记录_Mosquitto\Client
  3. css文字不被点击,css 让文字不被选中之-moz-user-select 属性介绍
  4. VMWare NSX安全生产和DMZ用例的详细设计指南
  5. Spring Boot学习总结(23)——Spring Boot 实践经验总结
  6. Mysql学习总结(59)——数据库分库分表策略总结
  7. mysql crc16_MySQL 5.6 中TIMESTAMP with implicit DEFAULT value is deprecated错误
  8. LOJ 6281 数列分块入门 5
  9. 详解 equals() 方法和 hashCode() 方法
  10. 安装 Android Studio 2.3 详细过程及错误解决