单一职责原则(SRP:Single responsibility principle)又称单一功能原则,面向对象五个基本原则(SOLID)之一。它规定一个类应该只有一个发生变化的原因。该原则由罗伯特·C·马丁(Robert C. Martin)于《敏捷软件开发:原则、模式与实践》一书中给出的。马丁表示此原则是基于汤姆·狄马克(Tom DeMarco)和Meilir Page-Jones的著作中的内聚性原则发展出的。
所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。
该原则提出对象不应该承担太多职责,如果一个对象承担了太多的职责,至少存在以下两个缺点:
- 一个职责的变化可能会削弱或者抑制这个类实现其他职责的能力;
- 当客户端需要该对象的某一个职责时,不得不将其他不需要的职责全都包含进来,从而造成冗余代码或代码的浪费。
举个例子说明一下:
在一个需要连接数据库的程序中,负责其他职责的某个模块需要连接数据库,若将数据库连接的操作写在这个模块中,那么对于其他需要连接数据库的都需要重新写一份,如果要修改数据库的密码,那么所有需要连接数据库的模块都需要修改密码。而将数据库的操作独立起来,那么只需要修改负责数据库操作的类就行了。同时也会将模块与数据库操作解耦。