设计模式之美--单一职责原则

什么是单一职责原则?

单一职责原则的英文是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。我们在设计类的时候,尽量避免设计大而全的类,要设计粒度小、功能单一的类,使得一个类只负责完成一个功能,这样有利于提高代码的复用性、可读性、可维护性,实现代码高内聚、低耦合。

posted @   Aurelius84  阅读(294)  评论(0)    收藏  举报
编辑推荐:
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
· 电商平台中订单未支付过期如何实现自动关单?
阅读排行:
· 精选 4 款免费且实用的数据库管理工具,程序员必备!
· Cursor:一个让程序员“失业”的AI代码搭子
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(6)
· 重生之我是操作系统(七)----内存管理(上)
· .NET 阻止Windows关机以及阻止失败的一些原因
点击右上角即可分享
微信分享提示