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

单一职责原则(SRP)

当然可以,以下是对单一职责原则(SRP, Single Responsibility Principle)详细说明、优劣对比、Python例子及结构图,适合深入理解和实战应用。


🧠 什么是单一职责原则(SRP)

单一职责原则(SRP):一个类、模块或函数应该只有一个引起它变化的原因

换句话说:一个组件只负责一件事,即它应该有单一功能职责,不应掺杂多种功能。


🎯 为什么需要单一职责原则?

✅ 好处:

优点说明
可维护性高改一个功能不会影响无关代码
可读性强代码结构更清晰,每个模块职责明确
易于测试每个类/函数功能单一,更容易编写单元测试
可重用性强单一功能更容易在不同场景复用
易于协作开发不同人负责不同职责,代码互不干扰

❌ 潜在缺点:

缺点说明
类增多拆分职责后类/模块数量可能增加
初期开发繁琐比写“大杂烩类”更费设计思考
过度设计风险不恰当地细分可能导致“类爆炸”

🐍 Python 示例

我们先看一个违反 SRP 的“违例写法”:

# ❌ 违反单一职责:一个类处理了两个职责:数据管理 & 文件保存
class Report:def __init__(self, content):self.content = contentdef get_content(self):return self.contentdef save_to_file(self, filename):with open(filename, 'w') as f:f.write(self.content)

问题:如果将来保存方式变了(比如改为保存到数据库或云),这个类就要被改动,违反“变化的原因应该只有一个”。


✅ 正确的单一职责重构写法

# ✅ 只负责报告数据
class Report:def __init__(self, content):self.content = contentdef get_content(self):return self.content# ✅ 专门负责持久化的类
class ReportSaver:def save_to_file(self, report, filename):with open(filename, 'w') as f:f.write(report.get_content())

优点:

  • Report 只负责“内容管理”,
  • ReportSaver 专注“存储逻辑”,
  • 职责明确、互不干扰。

🧭 清晰逻辑图(Mermaid)

职责分离
get_content
save_to_file
📄 Report 类\n(仅处理内容)
💾 ReportSaver 类\n(仅负责保存)
File

🏁 总结一句话:

SRP 是高内聚、低耦合的基础。如果一个类有多个职责,它的变化就会互相牵连,修改一个功能可能会影响另一个功能,带来维护地狱。


如果你正在做面向对象设计,遵守 SRP 是非常值得长期坚持的习惯。
需要我帮你结合某个实际项目或框架应用 SRP 设计也可以继续说!需要我画类图 or 多层SRP的结构演进图也可以~

http://www.xdnf.cn/news/3661.html

相关文章:

  • 安妮推广导航系统开心版多款主题网址推广赚钱软件推广变现一键统计免授权源码Annie
  • 写了个脚本将pdf转markdown
  • C/C++工程师使用 DeepSeek
  • [面试]SoC验证工程师面试常见问题(三)
  • 2505C++,wmi客户端示例
  • MySQL:联合查询
  • Linux-07-Shell
  • 大模型在终末期肾脏病风险预测与临床方案制定中的应用研究
  • 如何封装一个线程安全、可复用的 HBase 查询模板
  • Encoder-free无编码器多模态大模型EVEv2模型架构、训练方法浅尝
  • Windows 使用set和setx设置环境变量(skywalk3)
  • 2.LED灯的控制和按键检测
  • 【MySQL】事务管理
  • 区块链+IoT:创新场景落地背后的技术攻坚战
  • Python镜像源配置:
  • 数据结构-线性结构(链表、栈、队列)实现
  • MATLAB图像加密案例
  • 状压 DP 详解
  • 揭开并发编程的面纱:从零开始构建 Java 阻塞队列
  • 【AI提示词】系统分析员
  • Redis怎么避免热点数据问题
  • 软件第三方测试:关键部分、意义、流程及方法全解析?
  • 轻量级在线Excel预览工具
  • PyTorch、Flash-Attn、Transformers与Triton技术全景解析+环境包
  • 第 13 届蓝桥杯 C++ 青少组省赛中 / 高级组 2022 年真题
  • Python全流程开发实战:基于IMAP协议安全下载个人Gmail邮箱内所有PDF附件
  • SQL语句练习 自学SQL网 在查询中使用表达式 统计
  • 组件通信-mitt
  • 数据结构之哈夫曼树
  • 【Hive入门】Hive性能调优之Join优化:深入解析MapJoin与Sort-Merge Join策略