单一职责原则(SRP),The Single Responsibility Principle
定义
一个类的修改只能有一个被修改的原因。
通俗地讲,就是一个类只能负责一个职责,修改一个类不能影响到别的功能,也就是说只有一个导致该类被修改的原因。我们写代码的都知道尽量要做到低耦合、高内聚的特性,单一职责原则正是保证了类与类之间的低耦合性。一个类如果承担过多的职责,就会有很多原因来导致这个类的被修改,就有很大可能性影响到别的功能。
单一职责原则,看起来是一个非常简单的原则,但真正实践起来也并非易事,因为职责的联合在实际当中是经常遇到的事,也不能随便地去拆分类去适配单一职责模式,所以如何从这些联合的职责中合理地把职责分隔出来更合适的遵守单一职责原则要好好考虑。
看看下面这这个接口是否符合单一职责原则呢?
public interfaceUserInterface{
voidsaveUser(User user);
UsergetUser(long id);
voidupdateUserBalance(long id, BigDecimal balance);
BigDecimalgetUserBalance(long id);
}
这是一个用户接口,提供四个方法:保存用户、获取用户、更新用户余额、获取用户余额,很显然用户个人信息与用户的账户余额是两回事,这样设计在一起耦合非常高,不利于扩展,也不符合单一职责原则,我们可以把它折分成两个,一个为用户信息接口,一个账户接口,如下
public interfaceUserInterface{
voidsaveUser(User user);
UsergetUser(long id);
}
public interfaceAccountInterface{
voidupdateUserBalance(long id, BigDecimal balance);
BigDecimalgetUserBalance(long id);
}
这样分开来,是不是就符合了单一职责原则,类的复杂性和耦合性也降低了,即使用户接口或账户接口加减接口也不影响别的接口实现类。
所以,单一职责原则可以总结为以下优势:
1、低耦合性,影响范围小。
2、类复杂度降低,职责分明,提高了可读性。
3、职责单一,利于维护。