设计模式七大原则-单一职责原则SingleResponsibility
七大原则是在设计“设计模式”的时候需要用到的原则,它们的存在是为了保证设计模式达到以下几种目的:
1.代码重用性
2.可读性
3.可拓展性
4.可靠性(增加新的功能后,对原来的功能没有影响)
5.使程序呈现高内聚、低耦合的特性
单一职责:
对类来说,即一个类应该只负责一项职责(并不是只有一个方法,即关系“订单”的类不关心“员工”)。如类A负责两个不同的职责:职责1,职责2.当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的颗粒度分解为A1、A2。
例子:这里的Vehicle类颗粒度不够细,调用vehicle.run("飞机")时,业务逻辑是错误的。违背了单一职责原则。
public class singleResponsibility {public static void main(String[] args) {Vehicle vehicle = new Vehicle();vehicle.run("汽车");vehicle.run("飞机");}//Java中的内部类需要一个外部类的实例来创建它的实例,除非它是一个静态内部类。static class Vehicle {void run (String vehicle){System.out.println(vehicle+"在路上跑");}}
}
目的:
1.降低类的复杂度,一个类只负责一项职责。
2.提高代码的可读性,可维护性、
3.降低变更引起的风险。
4.通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则,只有类中方法数量足够少,可以在方法级别保持单一职责原则。【也就是要根据实际情况权衡利弊,如果加类太浪费的话就只加几个方法就可以】
public class singleResponsibility {public static void main(String[] args) {Vehicle2 vehicle2 = new Vehicle2();vehicle2.runOnroad("汽车");vehicle2.runOnair("飞机");}//Java中的内部类需要一个外部类的实例来创建它的实例,除非它是一个静态内部类。static class Vehicle1 {void run (String vehicle){System.out.println(vehicle+"在路上跑");}}static class Vehicle2 {void runOnroad (String vehicle){System.out.println(vehicle+"在路上跑");}void runOnair (String vehicle){System.out.println(vehicle+"在天上飞");}}
}
相关文章:
设计模式七大原则-单一职责原则SingleResponsibility
七大原则是在设计“设计模式”的时候需要用到的原则,它们的存在是为了保证设计模式达到以下几种目的: 1.代码重用性 2.可读性 3.可拓展性 4.可靠性(增加新的功能后,对原来的功能没有影响) 5.使程序呈现高内聚、低耦合的…...
msfconsole利用Windows server2008cve-2019-0708漏洞入侵
一、环境搭建 Windows系列cve-2019-0708漏洞存在于Windows系统的Remote Desktop Services(远程桌面服务)(端口3389)中,未经身份验证的攻击者可以通过发送特殊构造的数据包触发漏洞,可能导致远程无需用户验…...
Reinforcement Learning学习(三)
前言 最近在学习Mujoco环境,学习了一些官方的Tutorials以及开源的Demo,对SB3库的强化学习标准库有了一定的了解,尝试搭建了自己的环境,基于UR5E机械臂,进行了一个避障的任务,同时尝试接入了图像大模型API,做了一些有趣的应用,参考资料如下: https://mujoco.readthedo…...
hw meta10 adb back up DCIM
1. centos install adb 2. HW enable devlepment mode & enalbe adb debug 3. add shell root/zt/adb-sync python3 ./adb-sync --reverse /sdcard/DCIM/Camera /root/zt/meta10...
Unity2D游戏制作入门 | 12(之人物受伤和死亡的逻辑动画)
上期链接:Unity2D游戏制作入门 | 11(之人物属性及伤害计算)-CSDN博客 上期我们聊到了人物的自身属性和受伤时的计算,我们先给人物和野猪挂上属性和攻击属性的代码,然后通过触发器触发受伤的事件。物体(人物也好敌人也行ÿ…...
从河流到空气,BL340工控机助力全面环保监测网络构建
在环保监测领域,智能化、高效率的监测手段正逐步成为守护绿水青山的新常态。其中,ARMxy工业计算机BL340凭借其强大的处理能力、高度的灵活性以及广泛的兼容性,在水质监测站、空气质量检测、噪音污染监控等多个环保应用场景中脱颖而出…...
零拷贝技术
背景 磁盘可以说是计算机系统重最慢的硬件之一,读写速度相对内存10以上,所以针对优化磁盘的技术非常的多,比如:零拷贝、直接I/O、异步I/O等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的…...
Flutter_Android上架GooglePlay_问题
上架GooglePlay权限问题 问题描述 REQUEST_INSTALL_PACKAGES 权限问题解决方式 方式1 找到所有使用该权限的库修改删除该权限引用 方式2 打开项目 ~/andoird/app/src/main/AndroidMainfest.xml 添加文本<uses-permission android:name"android.permission.REQUES…...
【Java】解决Java报错:NumberFormatException
文章目录 引言1. 错误详解2. 常见的出错场景2.1 字符串包含非数字字符2.2 空字符串或 null 字符串2.3 数值超出范围 3. 解决方案3.1 验证字符串格式3.2 使用异常处理3.3 处理空字符串和 null 4. 预防措施4.1 数据验证4.2 编写防御性代码4.3 单元测试 结语 引言 在Java编程中&a…...
视觉大模型(VLLM)学习笔记
视觉多模态大模型(VLLM) InternVL 1.5 近日,上海人工智能实验室 OpenGVLab 团队、清华大学、商汤科技合作推出了开源多模态大语言模型项目InternVL 1.5,它不仅挑战了商业模型巨头例如 GPT-4V 的霸主地位,还让我们不禁…...
【软考的系统分析师的考题考点解析2025】
2024-2025系统分析师考试(简称软考)是计算机技术与软件专业技术资格(水平)考试中的高级资格考试,主要考察考生在系统分析、系统设计、项目管理等方面的知识和技能。以下是软考系统分析师的常见考点、考题和重点&#x…...
JavaScript前端技术入门教程
引言 在前端开发的广阔天地中,JavaScript无疑是最耀眼的一颗明星。它赋予了网页动态交互的能力,让网页从静态的文本和图片展示,进化为可以与用户进行实时交互的丰富应用。本文将带您走进JavaScript的世界,为您提供一个入门级的教…...
类和对象(上续)
前言:本文介绍类和对象中的一些比较重要的知识点,为以后的继续学习打好基础。 目录 拷贝构造 拷贝构造的特征: 自定义类型的传值传参 自定义类型在函数中的传值返回 如果返回值时自定义的引用呢? 在什么情况下使用呢&#…...
【C++初阶学习】第十三弹——优先级队列及容器适配器
C语言栈:数据结构——栈(C语言版)-CSDN博客 C语言队列:数据结构——队列(C语言版)-CSDN博客 C栈与队列:【C初阶学习】第十二弹——stack和queue的介绍和使用-CSDN博客 前言: 在前面,我们已经…...
Java(十七)---ArrayList的使用
文章目录 前言1.ArrayList的简介2. ArrayList使用2.1.ArrayList的构造2.2.ArrayList的扩容机制(JDK17) 3.ArrayList的常见操作4. ArrayList的具体使用4.1.[杨辉三角](https://leetcode.cn/problems/pascals-triangle/description/)4.2.简单的洗牌游戏 5.ArrayList的问题及思考 …...
实验六、IPv4 地址的子网划分,第 2 部分《计算机网络》
你有没有发现,困的时候真的清醒不了。 目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 完成本练习之后,您应该能够确定给定 IP 地址和子网掩码的子网信息。 知道 IP 地址、网络掩码和子网掩码后,您应该能够确定有关该 IP 地…...
定个小目标之刷LeetCode热题(12)
这是一道简单题,使用位运算中的异或运算即可,异或运算有以下性质: 1、任何数异或 0 结果仍然是原来的数,即 a⊕0a 2、任何数和其自身做异或运算,结果是 0 所以我们只需要让数组里的所有元素进行异或运算得到的结果就…...
MYSQL内存占用查询语句
可以通过以下 SQL 语句查询相关配置参数的当前值: InnoDB 缓冲池大小 (innodb_buffer_pool_size): SHOW VARIABLES LIKE innodb_buffer_pool_size;最大连接数 (max_connections): SHOW VARIABLES LIKE max_connections;临时表大小 (tmp_table…...
HikariCP连接池初识
HikariCP的简单介绍 hikari-光,hikariCP取义:像光一样轻和快的Connetion Pool。这个几乎只用java写的中间件连接池,极其轻量并注重性能,HikariCP目前已是SpringBoot默认的连接池,伴随着SpringBoot和微服务的普及&…...
LeetCode136只出现一次的数字
题目描述 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 解析 需要想到异或运算&#…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
