当前位置: 首页 > news >正文

设计模式-单一职责原则

基本介绍

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

应用实例

方案1

public class SingleResponsibility1 {public static void main(String[] args) {Vehicle vehicle = new Vehicle();vehicle.run("摩托车");vehicle.run("汽车");vehicle.run("飞机");}}// 交通工具类
// 方式1
// 1.在方式1的run方法种,违反了单一职责原则
// 2.解决:根据交通工具运行方法的不同,分解成不同的嘞
class Vehicle {public void run(String vehicle){System.out.println(vehicle + "在公路上运行");}
}

方案2

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

方案3

/*** @author zhupanlin* @version 1.0* @description: TODO* @date 2024/4/9 9:46*/
public class SingleResponsibility3 {public static void main(String[] args) {Vehicle2 vehicle2 = new Vehicle2();vehicle2.run("汽车");vehicle2.runAir("飞机");vehicle2.runWater("轮船");}}// 方式3
// 1.这种修改方法没有对原来的类做大修改,只是增加了方法
// 2.这里虽然没有在类级别上遵守单一职责原则,但是在方法级别上遵守单一职责原则
class Vehicle2 {public void run(String vehicle){System.out.println(vehicle + "在公路上运行");}public void runAir(String vehicle){System.out.println(vehicle + "在天上上运行");}public void runWater(String vehicle){System.out.println(vehicle + "在水中上运行");}
}

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

  1. 降低类的复杂度,一个类只负责一项职责。
  2. 提高类的可读性,可维护性
  3. 降低变更引起的风险
  4. 通常情况下,我们应当遵守单一职责原则, 只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则.

http://www.lryc.cn/news/338311.html

相关文章:

  • vue和nunjucks的变量插值的形式{{}}冲突
  • 多语言婚恋交友APP开发流程一览
  • RUM 最佳实践-交互延迟的探索与发现
  • spring boot 集成 flyway依赖 做数据库迁移,让部署没烦恼
  • TCP协议--传输机制
  • 句柄ros::NodeHandle nh(“~“)与nh对launch文件参数配置(param)的影响
  • C++_List的学习
  • centos 7.9 nginx本地化安装,把镜像改成阿里云
  • JVM规范中的运行时数据区
  • Stable Diffusion文生图技术详解:从零基础到掌握CLIP模型、Unet训练和采样器迭代
  • SDK-0.7.8-Release-实体管理 - ApiHug-Release
  • 3. DAX 时间函数-- DATE 日期--一生二,二生三,三生万物
  • c 解数独(通用方法,适用于9×9 数独)
  • 一篇文章深入学习Java的AQS(AbstractQueuedSynchronizer)
  • Linux sed
  • 【MySQL】MySQL在Centos 7环境安装
  • 【CSS】一篇文章讲清楚screen、window和html元素的位置:top、left、width、height
  • 铸造大型基础平板的结构应该怎样设计
  • 医院预约系统微信小程序APP前后端
  • springboot数字化智慧城市管理系统源码
  • 【鸿蒙开发】第二十一章 Media媒体服务(一)
  • 【QT教程】QT6 Web应用实战
  • (我的创作纪念日)[MySQL]数据库原理7——喵喵期末不挂科
  • 普乐蛙VR航天体验馆设备VR太空飞船VR元宇宙展厅
  • 基于torch的图像识别训练策略与常用模块
  • 微信小程序制作圆形进度条
  • 大模型(Large Models):探索人工智能领域的新边界
  • 缓存相关知识总结
  • Mapmost Alpha:开启三维城市场景创作新纪元
  • 【大模型完全入门手册】——引言