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

单一职责原则(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的结构演进图也可以~

相关文章:

  • Nginx核心功能及正则表达
  • 使用arduino控制超声传感器HC-SR04测量距离
  • 清洗数据集
  • C#编程精要:局部变量、类型推断与常量深度解析
  • HTTP和HTTPS
  • 内部类(3):匿名内部类
  • 拆解一个550-800Mhz的LC滤波器内部大图配测试曲线
  • 前端应用开发技术历程的简要概览
  • wfp CommandParameter 详细解说
  • [Windows] Simple Live v1.8.3 开源聚合直播 :支持哔哩哔哩 / 虎牙 / 斗鱼 / 抖音
  • LWIP带freeRTOS系统移植笔记
  • [算法学习]——通过RMQ与dfs序实现O(1)求LCA(含封装板子)
  • C#将Mat或Byte快速转换为Bitmap格式
  • 高露洁牙膏是哪个国家的品牌?高露洁牙膏哪一款最好?
  • 内置类型成员变量的初始化详解
  • 【基础算法】二分查找的多种写法
  • rabbitMQ如何确保消息不会丢失
  • Qt通过QXlsx库文件写入到excl文件,读取excl文件
  • 解决The‘InnoDB’feature is disabled; you need MySQL built with ‘InnoDB’ to have it
  • 计算几何(简单旋转卡壳)2024昆明邀请赛
  • 5名中国公民在美国交通事故中遇难
  • “五一”第三天郑州铁路局预计发送旅客76万人
  • 人民日报和音:汇聚和平与发展的全球南方力量
  • 研究完蚂蚁搬家,我好像明白了为什么我们总是堵车
  • 取消了“仅退款”,商家就可以高枕无忧了吗?
  • 短剧迷|《权宠》一出,《名不虚传》