【编码魔法师系列_六大原则1】单一职责原则(Single Responsibility Principle)

news2024/11/8 0:40:46

在这里插入图片描述

学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。

文章目录

  • 定义
  • 例子
  • 违背单一原则的例子
  • 单一原则示例
  • 测试
  • 测试结果
  • 优点

定义

修改一个类的原因只能有一个,即一个类只负责一项职责。

例子

输出交通工具的驱动能源

违背单一原则的例子

如果“混动汽车”的概念还没出现之前,如下写是没啥问题的

public class Power {
    public void power(String transportation) {
        if (transportation.equals("电动车")) {
            System.out.println(transportation + "是电力驱动的");
        } else {
            System.out.println(transportation + "是石油驱动的");
        }
    }
}

但是随着近几年“混动汽车”出现在大众的视线中,我们要修改甚至增加 if 的逻辑,就有可能引起石油驱动部分业务报错。而且,石油驱动的,又可以分为 汽油和柴油 驱动,如果类似这种的逻辑日益复杂起来,我们就有可能在修改一个需求的时候导致其他部分的错误

单一原则示例

电力驱动

public class ElectricPower {
    public void power(String transportation){
        System.out.println(transportation+"是电力驱动的");
    }
}

石油驱动

public class OilPower {
    public void power(String transportation){
        System.out.println(transportation+"是石油驱动的");
    }
}

我们为每一种能源创建一个类,每一个类中都通过power方法来表示驱动能源。当有新的能源汽车出现,就无需再修改原来的方法了。我们只需要新增能源类并通过power方法来表示驱动能源

测试

public class Test {
    public static void main(String[] args) {

        ElectricPower electricPower = new ElectricPower();
        electricPower.power("电动车");

        OilPower oilPower = new OilPower();
        oilPower.power("摩托车");
    }
}

测试结果

电动车是电力驱动的
摩托车是石油驱动的

优点

1、可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;
2、提高类的可读性,提高系统的可维护性;
3、变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。

文章后期会持续优化,如果觉得小名的文章帮助到了您,请关注小名,支持一下小名😄,给小名的文章点赞👍、评论✍、收藏🤞谢谢大家啦~♥♥♥
编码魔法师系列文章,会收录在小名的【设计模式】专栏中,希望大家可以持续关注🎉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/636245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ABAP: NUMBER_GET_NEXT用法

NUMBER_GET_NEXT 是用来自动获取编号的方法。 1、SNRO : 创建编号范围对象,例如,ZTEST_001 点击间隔编辑,可以设置编号范围,如下图所示。 2、SE11: 自定义设置编号长度域,例如,ZTEST_NUM 3、程序里面调用N…

自动驾驶——基于五次多项式螺旋线方程的换道曲线规划

1.BackGround 已知:换道初始纵坐标y0(横向距离),换道初始航向角tan0,换道时间t,换道结束纵坐标yf,换道结束航向角tanf,车速VehSpd,曲线中点曲率q且曲率变化率为0。求解期…

python:tkinter图形界面通讯录+txt文本存储数据

1 实验目的与要求 实验目的:设计一个实用的小型通讯录程序 实验要求:最后的通讯录要写入文件中保存起来 2 实验内容 本次实验内容如下: 设计一个实用的小型通讯录程序,具有添加,查询和删除功能。由姓名&#xff0…

jmeter008:结婚fiddler查看结果

如果通过jmeter的(察看结果树)查看响应数据不完整时, 可以结合fiddler来查看请求数据, 方法如下: 在请求的(高级)填写本地ip, 端口号,打开fiddler,运行jmeter请求即可抓包

【新版】系统架构设计师 - 计算机网络

个人总结,仅供参考,欢迎加好友一起讨论 架构 - 计算机网络 考点摘要 TCP/IP协议族(★★★★) 网路规划与设计(★★★★) 组网技术(★) 网络存储(★) IPv…

LabVIEW开发经济高效的多轴运动控制

LabVIEW开发经济高效的多轴运动控制 使用PC并行端口到驱动器电路接口技术开发的,该技术消除了在PC内部安装昂贵的插入式运动控制板的要求。为所介绍的系统开发了PC到电机接口和驱动器电路板。该系统能够使用直流电机控制四轴运动或使用步进电机控制两轴运动。 运动…

chatgpt赋能Python-python怎么在程序环境中保存

介绍 Python是一个广泛应用于各种领域的高级编程语言,它具有易于学习、可读性强、支持多种编程范式、强大且丰富的库、较高的运行速度等众多优点。无论是数据科学、人工智能、Web开发、自动化测试、游戏开发等领域,Python都是优秀的选择。 然而&#x…

GPDB中Latch等待与唤醒实现机制

GPDB中Latch等待与唤醒实现机制 GreenPlum/PostgreSQL中有很多Latch以帮助多进程以及主线程与从线程之间协作。那么Latch是如何实现的呢?Latch可以在多进程之间以及主线程和从线程之间实现等待与唤醒,WaitEventSet是实现这项功能的关键结构。本文我们聊聊…

基于SpringBoot+Vue的平时成绩管理系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 在现代教育环境中&…

2023全新微信公众号无限回调系统源码 亲测可用

2023年微信公众号无限回调全新升级,无限回调系统功能更强大,现已对接易支付,支持用户自助充值、购买授权、更换授权和续费授权。此次升级还增加了多项实用性功能,为公众号运营者提供更好的服务和支持。

使用Python中的Pandas工具将多个CSV格式的数据文件合并为一个

文章目录 使用软件安装Pandas工具编写py程序运行程序注意事项 使用软件 Pycharm 2020.1 安装Pandas工具 执行命令:pip install pandas 编写py程序 path:文件所处路径 import pandas as pd import os# 指定多个csv文件所在的目录 csv_dir path# 获…

LinkedHashSet源码

介绍 LinkedHashSet是HashSet的子类 LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组双向链表 LinkedHashSet根据元素的hashCOde值来决定元素的存储位置,同时使用链表维护元素的次序,这使元素看起来以插入顺序保存的 LinkedHas…

辅助驾驶功能开发-功能规范篇(27)-导航辅助驾驶NAP-微避障策略

1.微避障策略功能概述 微避障策略是在NAP功能激活过程中,当邻车道有大型车辆时(卡车、公交车、大巴等)或小车压线或左右侧靠近路沿时,控制本车进行横向偏移,达到远离目标车或路沿的效果。本文分别对大型车辆偏移、小车压线偏移、路沿偏移、Merge处理和偏移规划这五个部分展…

华为OD机试真题 JavaScript 实现【不爱施肥的小布】【2023Q1 100分】

一、题目描述 某农村主管理了一大片果园,fields[i]表示不同国林的面积,单位m2,现在要为所有的果林施肥且必须在n天之内完成,否则影响收成。小布是国林的工作人员,他每次选择一片果林进行施肥,且一片国林施…

Reinforce算法原理及Tensorflow代码实现

Q-learning和DQN算法都是强化学习中的Value-based的方法,它们都是先经过Q值来选择动作。强化学习中还有另一大类是策略梯度方法(Policy Gradient Methods)。Policy Gradient 是一类直接针对期望回报(Expected Return)通…

电气火灾监控系统如何有效的预防木材加工企业电气火灾隐患

摘要:本文分析了木材加工企业的特点、现状及常见电气火灾隐患,提出了消灭电气火灾隐患的措施。结尾介绍了木材加工企业常用电气设备的选用及电气火灾监控系统在其低压配电系统的应用方案及产品选型。 关键词:木材加工企业;电气火…

网络服务——DHCP服务

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。 个人主页:小李会科技的…

我和老刘又被搞惨了

前两天在调试PHY的时候遇到了一堆问题,老刘都不耐其烦的搞定了,这次我们开始调试音频部分,音频部分很简单,无非就是录音,要是能把录音的音频拿到了,那就万事大吉了。老刘也是信心满满,老刘对我说…

操作系统性能提升之内核锁优化

性能为王,系统的性能提升是每一个工程师的追求。目前,性能优化主要集中在消除系统软件堆栈中的低效率上或绕过高开销的系统操作。例如,内核旁路通过在用户空间中移动多个操作来实现这个目标,还有就是为某些类别的应用程序重构底层…

提升效率,从这款智能挂灯开始

❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。2022年度博客之星评选TOP 10🏆,Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作…