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

什么是单一职责原则?

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

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

上一篇:13. Ajax验证用户名


下一篇:Java连接mysql初识