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

小谈设计模式(4)—单一职责原则

小谈设计模式(4)—单一职责原则

  • 专栏介绍
    • 专栏地址
    • 专栏介绍
  • 单一职责原则
    • 核心思想
      • 职责的划分
      • 单一变化原则
      • 高内聚性
      • 低耦合性
      • 核心总结
    • 举例
      • 图书类(Book)
      • 用户类(User)
      • 图书管理类(Library)
      • 分析
    • 不遵守单一职责原则,可能引发的问题
      • 类的职责不清晰
      • 类的修改影响范围过大
      • 难以重用和扩展
    • Java代码实现
      • 程序分析
    • 总结

专栏介绍

专栏地址

link

专栏介绍

主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。
在这里插入图片描述

单一职责原则

单一职责原则(Single Responsibility Principle,SRP)是设计模式中的一项原则,它指出一个类或模块应该有且只有一个引起它变化的原因。换句话说,一个类或模块应该只负责一项职责。

核心思想

职责的划分

将系统中的功能和行为划分为不同的职责,每个类或模块只负责一种相关的职责。这样可以使得类的职责更加明确和清晰,便于理解和维护。

单一变化原则

一个类或模块应该只有一个引起它变化的原因。如果一个类负责多种不相关的职责,那么对其中一个职责的修改可能会影响到其他职责,增加了代码的风险和复杂性。

高内聚性

类的内聚性指的是类内部的成员之间联系的紧密程度。遵守单一职责原则可以提高类的内聚性,使得类内部的成员相互关联度高,功能相关的代码放在同一个类中,便于理解和维护。

低耦合性

类之间的耦合性指的是彼此之间的依赖程度。遵守单一职责原则可以降低类之间的耦合性,使得类之间的依赖关系更加清晰和简单,减少代码的依赖和影响范围。

核心总结

单一职责原则的核心思想是将一个类或模块的职责限定在一个很小的范围内,使其只负责一种相关的功能或行为。这样可以保持类的高内聚性、低耦合性,提高代码的可读性、可维护性和可扩展性。
在这里插入图片描述

举例

假设我们有一个图书管理系统,其中包含了图书的借阅和归还功能。我们可以将这个系统划分为以下几个类:

图书类(Book)

负责表示图书的属性和行为,比如书名、作者、借阅状态等。

用户类(User)

负责表示用户的属性和行为,比如用户名、密码、借阅图书等。

图书管理类(Library)

负责管理图书的借阅和归还功能。
在这里插入图片描述

分析

在这个例子中,每个类都只负责一种相关的职责,符合了单一职责原则。图书类只负责表示图书的属性和行为,用户类只负责表示用户的属性和行为,图书管理类只负责管理图书的借阅和归还功能。

不遵守单一职责原则,可能引发的问题

类的职责不清晰

一个类负责了多种不相关的职责,使得代码难以理解和维护。

类的修改影响范围过大

当一个类负责多种职责时,对其中一个职责的修改可能会影响到其他职责,增加了代码的风险和复杂性。

难以重用和扩展

一个类负责多种职责时,可能会导致代码的耦合性增加,使得难以重用和扩展。
在这里插入图片描述

Java代码实现

// 图书类
class Book {private String title;private String author;private int pageCount;// 构造函数、getter和setter方法省略// 图书的展示功能public void display() {System.out.println("Title: " + this.title);System.out.println("Author: " + this.author);System.out.println("Page Count: " + this.pageCount);}
}// 图书管理类
class Library {private List<Book> books;// 构造函数、getter和setter方法省略// 图书的借阅功能public void borrowBook(Book book) {if (books.contains(book)) {books.remove(book);System.out.println("Borrowed book: " + book.getTitle());} else {System.out.println("Book not available for borrowing.");}}// 图书的归还功能public void returnBook(Book book) {books.add(book);System.out.println("Returned book: " + book.getTitle());}
}

在这里插入图片描述

程序分析

我们定义了两个类:Book和Library。Book类负责表示图书的属性和行为,包括展示图书的功能;Library类负责管理图书的借阅和归还功能。

通过将图书的展示功能和图书的借阅、归还功能分别放在不同的类中,我们遵守了单一职责原则。每个类只负责一种相关的职责,使得代码更加清晰和易于维护。

当我们需要使用这些功能时,可以直接调用相应的方法

Book book = new Book("Design Patterns", "Gang of Four", 400);
book.display();Library library = new Library();
library.borrowBook(book);
library.returnBook(book);

这样,我们可以很方便地使用图书的展示、借阅和归还功能,而不会影响到其他相关的功能。

总结

总结来说,单一职责原则是设计模式中的一项重要原则,它要求将功能划分得更加细致,使得每个类或模块
只负责一种相关的职责。遵守单一职责原则可以提高代码的可读性、可维护性和可扩展性。

相关文章:

小谈设计模式(4)—单一职责原则

小谈设计模式&#xff08;4&#xff09;—单一职责原则 专栏介绍专栏地址专栏介绍 单一职责原则核心思想职责的划分单一变化原则高内聚性低耦合性核心总结 举例图书类&#xff08;Book&#xff09;用户类&#xff08;User&#xff09;图书管理类&#xff08;Library&#xff09…...

ATF(TF-A) EL3 SPMC威胁模型-安全检测与评估

安全之安全(security)博客目录导读 ATF(TF-A) 威胁模型汇总 目录 一、简介 二、评估目标 1、数据流图 三、威胁分析 1、信任边界 2、资产 3、威胁代理 4、威胁类型 5、威胁评估 5.1 端点在直接请求/响应调用中模拟发送方FF-A ID 5.2 端点在直接请求/响应调用中模拟…...

AI绘画Stable Diffusion原理之扩散模型DDPM

前言 传送门&#xff1a; stable diffusion&#xff1a;Git&#xff5c;论文 stable-diffusion-webui&#xff1a;Git Google Colab Notebook部署stable-diffusion-webui&#xff1a;Git kaggle Notebook部署stable-diffusion-webui&#xff1a;Git AI绘画&#xff0c;输入一段…...

NSS [西湖论剑 2022]real_ez_node

NSS [西湖论剑 2022]real_ez_node 考点&#xff1a;ejs原型链污染、NodeJS 中 Unicode 字符损坏导致的 HTTP 拆分攻击。 开题。 附件start.sh。flag位置在根目录下/flag.txt app.js(这个没多大用) var createError require(http-errors); var express require(express); v…...

MySQL常用函数集锦 --- 字符串|数值|日期|流程函数总结

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】&#x1f388; 本专栏旨在分享学习MySQL的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 一、字符…...

GaussDB(DWS)云原生数仓技术解析:湖仓一体,体验与大数据互联互通

文章目录 前言一、关于数据仓库需求场景分类二、数据仓库线下部署场景2.1、线下部署场景介绍及优劣势说明2.2、线下部署场景对应的客户需求 三、数据仓库公有云部署场景3.1、公有云部署场景介绍及优劣势说明3.2、公有云部署场景对应的客户需求 四、为何重视数据共享&#xff08…...

Navicat历史版本下载及地址组成分析

下载地址组成 https://download3.navicat.com/download/navicat161_premium_cs_x64.exe 地址逻辑&#xff1a;前缀 版本 类型 语言 位数 前缀: http://download.navicat.com/download/navicat版本: 三位数&#xff0c;前两位是大版本&#xff0c;后一位是小版本&#xff…...

avue之动态切换表格样式问题

动态切换 a\b 两个表格 &#xff0c;a表格高度变成b的高度等问题&#xff0c; 解决方案&#xff1a;...

彻底解决ruoyi分页后总数错误的问题

问题描述 最近时不时的发现用户列表出来的数据只有24条&#xff0c;但是总记录数却有58条&#xff0c;很奇怪。各种百度查询&#xff0c;都是什么修改查询分页改代码&#xff0c;尝试后发现还是没有效果&#xff0c;经过各种验证发现就是SQL语句错误。 如果非要说是SQL语句没…...

SpringMVC学习笔记——1

SpringMVC学习笔记——1 一、SpringMVC简介1.1、SpringMVC概述1.2、SpringMVC快速入门1.3、Controller中访问容器中的Bean1.4、SpringMVC关键组件的浅析 二、SpringMVC的请求处理2.1、请求映射路径配置2.2、请求数据的接收2.2.1、键值对方式接收数据2.2.2、封装JavaBean数据2.2…...

20230908_python练习_selenium模块爬取网页小说练习

霍比特人小说爬取&#xff0c;使用 selenium 模块调用谷歌浏览器&#xff0c;无界面模式爬取小说网站信息&#xff0c;将数据按照每次2000字符在mysql中保存。 # https://www.shukuai9.com/b/324694/ # 导入需要的库 from selenium import webdriver # 导入Keys模块&#xff…...

Python:安装Flask web框架hello world示例

安装easy_install pip install distribute 安装pip easy_install pip 安装 virtualenv pip install virtualenv 激活Flask pip install Flask 创建web页面demo.py from flask import Flask app Flask(__name__)app.route(/) def hello_world():return Hello World! 2023if _…...

深度解析NLP文本摘要技术:定义、应用与PyTorch实战

目录 1. 概述1.1 什么是文本摘要&#xff1f;1.2 为什么需要文本摘要&#xff1f; 2. 发展历程2.1 早期技术2.2 统计方法的崛起2.3 深度学习的应用2.4 文本摘要的演变趋势 3. 主要任务3.1 单文档摘要3.2 多文档摘要3.3 信息性摘要 vs. 背景摘要3.4 实时摘要 4. 主要类型4.1 抽取…...

zabbix监控多实例redis

Zabbix监控多实例Redis 软件名称软件版本Zabbix Server6.0.17Zabbix Agent5.4.1Redis6.2.10 Zabbix客户端配置 编辑自动发现脚本 vim /usr/local/zabbix/scripts/redis_discovery.sh #!/bin/bash #Fucation:redis low-level discovery #Script_name redis_discovery.sh red…...

win11将visual studio 2022的调试控制台改为windows terminal

一、前言 默认的调试控制台太丑了&#xff0c;字体也没有好看的&#xff0c;还是更喜欢windows terminal 二、修改 2.1 修改之前 2.2 修改步骤 打开windows terminal点这个向下的标志 选择settings按照下图1, 2, 3步骤依次操作即可 2.3 修改之后 总结 漂亮很多了...

社区问答精选——长安链开发知多少?(8月)

本文是根据社群内开发者较为关注的问题进行整理&#xff0c;希望可以帮助开发者解决所遇到的问题。有更多问答在社区issue中描述更为细致&#xff0c;开发者提问前可以先按照关键词进行搜索。欢迎各位开发者按照问答template提交issue&#xff0c;也欢迎有意愿的开发者参与到社…...

神经网络-Unet网络

文章目录 前言1.seq2seq 编码后解码2. 网络结构3.特征融合4. 前言 Unet用来做小目标语义分割。 优点&#xff1a;网络结构非常简单。 大纲目录 2016年特别火&#xff0c;在细胞领域做分割特别好。 1.seq2seq 编码后解码 2. 网络结构 几个卷积层&#xff0c;越来越扁&#x…...

Java | 多线程综合练习

不爱生姜不吃醋⭐️ 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 &#x1f334;前言&#x1f334;一、卖电影票1.题目2.分析3.代码 &#x1f334;二、送礼物1. 题目2. 分析3.代码 &#x1f334;三.打印奇数1. 题目2.…...

Kotlin变量与控制条件的基本用法

一、变量与控制条件 1、var与val var&#xff1a;可修改变量 val&#xff1a;只读变量&#xff0c;只读变量并非绝对只读。 编译时常量只能在函数之外定义&#xff0c;因为函数内常量是在运行时赋值&#xff0c;编译时常量要在变量赋值前存在。并且值是无法修改的。 const…...

第18章_瑞萨MCU零基础入门系列教程之GPT

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...