1单一职责原则
单一职责原则
单一职责原则的英文名称是Single Responsibility Principle,简称SRP。
1单一职责原则的定义
英文原话是:
There should never be more than one reason fro a class to change。
UnderStanding:一个类,只能有一个存在的理由;即一个类应该只有一个职责。
一个类,应当只负责一件事,并且只能有一个原因而引起它的变化,这就是单一原则。
就像一个人,只有专注于一件事情,才能保证任务的高度完成;
类也能专注一个职责,提高对象的高内聚;
唯有单一职责,才能保证对象的细粒度。
对象的高内聚与细粒度,更加有利于对象的重用。
单一职责原则有利于对象的稳定。
类的职责越少,则对象之间的依赖关系就越少,耦合就越弱,收到其他对象的约束与牵制也就越少,保证了系统的可扩展性。
案例:媒体播放器
在媒体播放器中,可以在MediaPlayer类中定义一组与媒体播放相关的方法,如open()、play()、close()等。
这些方法从职责角度将是内聚的,完全符合单一职责原则中"专注于做一件事情"的要求。
但如果需求发生扩充,还需要提供上传下载媒体文件的功能,那么在设计时,就应该定义一个新类,如MediaTransfer,由它来承担这一职责,而不是为了方便,草草的将新功能加入到MediaPlayer类中。
单一职责的优点:
- 降低类的复杂度
- 提高类的可读性
- 提高代码的可维护性和复用性
- 降低因变引起的风险
2单一职责原则的应用
JavaEE中的分层框架模式实际上体现了单一职责原则,他将整个系统按照职责的内聚性分为不同的层,层内的模块与类具有宏观的内聚性,所关注的事情是一致的。例如,业务逻辑层主要关注系统的业务逻辑与业务流,而数据访问性只负责数据的持久化与访问。
一用户管理为例演示单一职责。在业务逻辑中定义类UserManager,在数据访问层定义类UserDao,在实体对象层定义类User,每个类具有不同的职责和功能。
结语:
单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或类设计是否优良,但"职责"和"变化原因"都是不可度量的,因项目而异,因环境而异。
只要你不停下来,慢一点也没关系。