设计模式之美--单一职责原则
什么是单一职责原则?
单一职责原则的英文是Single Responsibility Principle
,简称SRP
。其原始英文描述是:
A class or module should have a single responsibility.
一个类或者模块应当只负责完成一个功能(或职责)。
举个栗子:
在社交产品中,需设计一个UserInfo
类来记录用户心信息:
public class UserInfo{
private long userId;
private String userName;
private String email;
private String telephone;
private long createTime;
private long lastLoginTime;
private String provinceOfAddress; // 省
private String cityOfAddress; // 市
private String regionOfAddress; // 区
private String detailedAddress; // 详细地址
//... 其他属性
}
在上述这个代码样例里,UserInfo
类中包含的均为和用户相关的属性,比较满足SRP
原则。但有很多和地址信息相关的属性,其实可以考虑拆分为UserAddress
类,后续在扩展如电商物流等模块功能时,能更好的与UserInfo
解耦。
单一职责的好处
单一职责原则,通过设计粒度小、功能单一的类,避免了将不相关的功能耦合在一起,提高了类的内聚性。同时,类依赖和被依赖的其他类也变少了,减少了代码的耦合性。
但不可过多拆分类,如果拆分过细,反而会降低内聚性,影响代码的可维护性。
如何判断类职责是否单一?
这里没有一个具体的金科玉律,但从实际代码开发经验上,有一些可执行性的侧面判断指标,可供参考:
-
类中的代码行数、函数、或者属性过多;
-
类依赖的其他类过多
-
私有方法过多
-
类中大量的方法都是集中操作类中的几个属性
-
比较难给类起一个合适的名字
回顾一下
单一职责原则的英文是Single Responsibility Principle
,简称SRP
。我们在设计类的时候,尽量避免设计大而全的类,要设计粒度小、功能单一的类,使得一个类只负责完成一个功能,这样有利于提高代码的复用性、可读性、可维护性,实现代码高内聚、低耦合。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
· 电商平台中订单未支付过期如何实现自动关单?
· 精选 4 款免费且实用的数据库管理工具,程序员必备!
· Cursor:一个让程序员“失业”的AI代码搭子
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(6)
· 重生之我是操作系统(七)----内存管理(上)
· .NET 阻止Windows关机以及阻止失败的一些原因