设计模式六大原则---单一职责(高内聚)

经常跟同事争论代码哪里写的不对,只是知道不对,却不 能说明白为什么不对,因此意识到需要增加理论知识的研究,今天来分享一下设计模式六大原则之一的“单一职责”。

一.概念

1:通过看书和查资料,对于单一职责的定义大体上是这样的:对于类来说,一个类只做一件事。但是在日常开发过程中,我们发现,很少有一个类只做一件事的,因此我更倾向于如下这个定义:一个类负责一个功能领域中的相应职责
2:另外,单一职责也同样适用于方法,对于方法来说,一个方法只做一件事。
3:单一职责侧重点是高内聚,而剩下的五个原则侧重点是低耦合和扩展性

二.违背单一职责的场景

此篇文章知介绍类和方法违背单一职责的场景:
1:一个类承担了过多的职责。
2:在一个方法里面做了很多事项(实现细节)。

三.举例一个类承担过多的职责

在一个订单系统里面存在一个客户类(Customer),它的职责包含如下四点:
1: 更新姓名
2: 更新地址
3: 更新手机号
4: 更新密码
设计模式六大原则---单一职责(高内聚)

其中更新密码不该放到Customer类中,因为更新密码属于账号的范畴,我们应该新增一个账号类来负责更新密码。如下所示:
设计模式六大原则---单一职责(高内聚)

四.举例一个方法做了很多件事

拿更新密码举例,在此方法里面做了两件额外的事情:
1:判断就密码是否正确。
2:判断新密码是否符合规则。
设计模式六大原则---单一职责(高内聚)
判断旧密码是否正确判断新密码是否符合规则,应该单独抽出方法来实现。如下所示:
设计模式六大原则---单一职责(高内聚)

五.单一职责优点

1:类的复杂性降低,对于实现什么职责都有清晰明确的定义。
2:可读性提高。
3:可维护性提高。
4:变更引起的风险降低,一个接口的修改只对相应的实现类有影响,对其他接口无影响,这对系统的扩展性,维护性都有非常大的帮助。

六.单一职责适用范围

1:以类为单位:一个类只负责一个功能领域中的相应职责。
2:以方法为单位:一个方法只做一件事。
3:以类库为单位:要求类库职责清晰。
4:以项目为单位:要求项目职责清晰(客户端/管理后台/后台服务/定时任务)。