一、定义
单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因.
二、特点
单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小;
单一职责原则告诉我们:一个类不能太“累”!在软件系统中,一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作,因此要将这些职责进行分离,将不同的职责封装在不同的类中,即将不同的变化原因封装在不同的类中,如果多个职责总是同时发生改变则可将它们封装在同一类中
单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关实践经验
三、案例
某个公司需要对CRM(Customer Relationship Management,客户关系管理)系统中的客户信息统计并展示。
(一)初始方案
初始设计的方案类图如下:
CustomerDataChart类中各个方法的作用如下:
- getConnection():获取数据库连接
- findCustomers():获取客户列表信息
- createChart():创建图表
- displayChart():展示图表
存在问题
CustomerDataChart的职责比较多,不利于后期可读性以及维护,比如:获取数据库连接的方式发生变化,需要对这个类进行修改;而且,随着功能的增加,这个类会变得越来越臃肿;
(二)SRP优化
我们根据功能进行划分,把这个类拆分成多个类,拆分后的结构图如下:
这里通过三个类完成之前的功能:
- CustomerDataChart:负责创建和显示图表
- CustomerDao:负责查询客户信息;
- DBUtil:负责连接数据库
这样看起来,结构就清晰多了,将来维护也就更加方便