面向对象设计之SRP(单一职责)原则

SRP设计原则面向对象类设计的第一个原则,最优先考虑的因素单元测试

  一个类应该有且仅有一个职责。所谓一个类的职责是指引发该类变化的缘由,若是一个类具备一个以上的职责,那么就会有多个不一样的缘由 引发该类变化,其实就是耦合了多个互不相关的职责,就会下降这个类的内聚性。 测试

也就是说每个类只作一件事,那么什么叫作“一件事”?编码

  好比说一个学生信息管理类,这个类有“添加学生信息”、 “查询学生信息”、 “修改学生信息”、 “删除学生 信息”,那么这是4件事情,仍是一件事情呢?看起来好像是4个事情,但稍有经验的朋友应该都知道,这4个事情绝大部分状况下都是一个类来实现的, 而不是分红4个类!spa

好比说,我是一个程序猿,个人职责应该是“写程序”,但写程序有不少事情,例如:编码,单元测试、 系统测试,bug修复,开会,写文档……翻译

再好比说,个人BOSS是一个管理者,他的职责是“管理程序猿”,他也有不少工做,例如:制定计划, 团队建设、开会、协调资源、写文档……设计

又好比说,我是一个快递员,也有不少工做:分包、快递、收款、开会……对象


  这些职责其实都不是咱们本身定义的,而是公司或者部门或者组织给咱们安排工做的时候定义的,也就是说:“职责”是站在他人的角度来定义的,而不是本身定义的。继承

通过对咱们本身的职责的分析,咱们能够得出两个关于职责的重要结论: 资源

1)职责是站在他人的角度来定义的 文档

2)职责不是一件事,而是不少事情,但这些事情都是和职责紧密相关的


对应到面向对象设计领域,咱们能够说一个类的职责应该以下定义:

1)类的职责是站在其它类的角度来定义的

2)类的职责包含多个相关功能

  所以,SRP能够翻译成“一个类只负责一组相关的事情”,对应到代码中就是:一个类有多个方法,这些方法是相关。

 

注:SRP不能应用于聚合类,因此还有一个原则就是:优先考虑对象组合,而不是类继承

相关文章
相关标签/搜索