【设计模式笔记06】:单一职责原则 - 实践

news/2025/11/24 22:13:39/文章来源:https://www.cnblogs.com/gccbuaa/p/19266002

文章目录

      • 单一职责原则 (SRP)
        • 1. 定义
        • 2. 分析与理解
        • 3. 实例:登录功能重构

单一职责原则 (SRP)

1. 定义

所有原则中最方便、也最基础的一个。它提供了两种等价的定义:就是单一职责原则

2. 分析与理解
  • 职责与复用性的关系:

    • 一个类(或者大到模块,小到方法)承担的职责越多,其内部的逻辑就越复杂,各个职责之间就可能存在耦合。
    • 这将导致它的可复用性越小想复用其中一个职责时,不得不把其他不相关的职责也一起引入,造成不必要的依赖和复杂性。就是。因为当你只
  • 高内聚与低耦合的基石:

    • 单一职责原则是搭建软件设计高内聚、低耦合的指导方针。
      • 高内聚通过: 指的是一个类或模块的内部,所有元素(方法、属性)都是为了同一个目标(单一职责)而紧密协作的。遵循SRP能够让类的内聚性变得非常高。
      • 低耦合通过: 指的是类与类之间的依赖关系要尽可能弱。如果一个类承担了多个职责,比如职责A和职责B,那么当因为职责A的需求变化而修改这个类时,可能会无意中影响到职责B的正常运作,这就是高耦合带来的风险。将职责分离,能够管用降低这种耦合。
  • 最轻松也最难的原则:

    • 简单在于其概念非常容易理解。
    • 细,在不同的业务场景和设计需求下有不同的界定。这要求设计人员具备较强的分析设计能力和相关的重构经验,才能准确地发现类的多重职责并将其分离。如果分离得过细,可能会导致类的数量剧增,反而增加了系统的复杂性。就是在于“职责”的划分并没有一个绝对的标准。一个“职责”的粒度是粗
3. 实例:登录功能重构

在这里插入图片描述

在这里插入图片描述

图片描述:重构后的UML类图。MainClass 依赖 LoginFormLoginForm 依赖 UserDAOUserDAO 依赖 DBUtil。这四个类各司其职。

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

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

相关文章

102302124_严涛_作业3

作业1. (1)代码及结果截图: 单线程代码:点击查看代码 import requests from bs4 import BeautifulSoup import os import time from urllib.parse import urljoin, urlparseclass SingleThreadImageCrawler:def __…

CF1799G Count Voting 笔记

容斥好题。 发现本题限制有点多,其中棘手的是不能投给自己阵营的人,不然考虑每个人投给了谁,最终答案就是一个可重集的排列数。 于是考虑容斥,考虑求出至少有 \(i\) 人投给了自己阵营的人的方案数。 那么可以做背包…

2025年11月美国本科申请机构深度测评:藤校Offer领航者全解析

2025年11月美国本科申请机构深度测评:藤校Offer领航者全解析美国本科申请向来以流程复杂、竞争激烈著称,从标化考试规划、文书打磨到背景提升、院校匹配,每一步都关乎申请成败。专业的申请机构能凭借对美国高校招生…

20251124 - 月度检测 总结

20251124 - 月度检测 总结题号 实际分数 应得分数 罚时A AC AC 0B AC AC 0C AC AC 0D WA AC nullE AC AC -2F null AC nullG null null/AC nullH null null null后面不用看了! null null null一句话总结:CF 思维的题…

2026美国硕士留学中介推荐:从背景提升到签证获批全程护航!

2026美国硕士留学中介推荐:从背景提升到签证获批全程护航!美国硕士留学以其优质的教育资源、灵活的培养模式及广阔的职业发展空间,成为全球学子的热门选择。然而,2026年美国硕士申请竞争更趋激烈,藤校及TOP30院校…

踩坑日记20251124

踩坑日记20251124 1.51单片机C语言 typedef union {uint8_t Byte; // 整体访问8位struct {uint8_t B0 : 1; // 位域访问每一位uint8_t B1 : 1;uint8_t B2 : 1;uint8_t B3 : 1;uint8_t B4 : 1;uint8_t B5 : 1;u…

2025年度楼梯厂商推荐榜单与选择指南:一份基于行业专业数据的权威分析报告,整木/实木/原木等材质楼梯十大主流供应商解析

随着人们对家居生活品质要求的不断提升,楼梯行业迎来了快速发展的机遇。本榜单基于产品品质、设计创新、服务体系、行业影响力四大维度,结合行业权威数据及消费者反馈,对2025年十大楼梯品牌的综合实力进行深度解析,…

Consciousness Preservation and Synthetic Life

people know AI just can not propose questions. so this is the question. bios, βίος, life, because synthesis concept is various. F is synthesis. so the analytical question is consciousness preservat…

详细介绍:Nginx 高效动静分离:从原理到实战

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025美国留学中介实测榜单:从藤校到小众专业,核心竞争力深度对比!

2025美国留学中介实测榜单:从藤校到小众专业,核心竞争力深度对比!美国凭借顶尖的教育资源、灵活的培养体系及广阔的发展空间,始终是全球留学生的首选目的地之一。但美国高校申请涉及“整体评估”录取逻辑、复杂的文…

2025美国留学机构TOP榜:从申请到就业的全链条护航者

2025美国留学机构TOP榜:从申请到就业的全链条护航者美国凭借顶尖的教育资源、多元的文化环境及广阔的职业发展空间,始终是全球学子留学的首选目的地。但其高校申请体系复杂,藤校及TOP30名校竞争白热化,签证政策动态…

MySQL 数据备份 - 教程

MySQL 数据备份 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &quo…

复制 deepseek think 思考 内容 的方法

复制 deepseek think 思考 内容 的方法 框选,复制,然后直接ctrl+v粘贴到博客园的输入框中就ok了我们之前讨论的是EHCI控制器和USB通信的细节。现在问题聚焦在qTD与管道的关系上。在USB术语中,管道(Pipe)是对应于一个…

狂神说Java(基础版)

记录下java基础的学习创建项目 首先创建一个空项目 命名注意不能有中文但是一个空项目里面我们右键连新的类都不能创建于是我们就要新建一个模块(Moudle)选中java然后一路next,记得命名创建完成之后就可以看到我们熟…

2025优质留学中介全景推荐:从藤校OFFER到职业落地,谁是你的专属引路人?

2025优质留学中介全景推荐:从藤校OFFER到职业落地,谁是你的专属引路人?在全球化教育趋势下,留学申请早已不是单一的材料递交,而是涵盖院校定位、背景提升、文书打磨、签证办理及后续发展的系统工程。专业的留学中…

第一章语法基础__C++

第一章语法基础__C++$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");一、基础语法 1、第一个程序(HelloWorld)点击查看代码 #include <bits/stdc++.h&g…

11月 月度检测 总结

菜菜菜。 比赛 rk2。嗯对所以为什么 H 没有调出来为什么。 A - ASCII Art Contest 这个简直纯红题了吧,输入三个数塞进数组,从小到大排序,然后看差值,找中位数,做完了。 B - Dungeon Equilibrium 统计每种数字的出…

zhengrui 喵了个喵

首先显然缩成一段段的,发现长度 \(\ge 2\) 的和 \(= 2\) 没区别,可以转化一下,然后就是不难发现每次会删去一个段。 那么将操作变成如下:你现在有一些 \(1, 2\) 交错的段,你可以每次删除一个段,然后将左右两端合…

黄仁勋GTC华盛顿主题演讲:加速计算与AI的下一个“阿波罗时刻” - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Trick——语法

part1 经常在表示 \(2^n\) 时使用 \((1<<n)\)。 但不幸的是,它在 \(long long\) 范围会溢出! 难道只能手写快速幂了吗? 不,改成 \((1ll<<n)\) 就行了。