面向对象设计原则——单一职责原则

单一职责原则(Single Responsibility Principle )简称SRP

定义

一个类应该只有一个发生变化的原因。

简单理解:一个类只负责一项职责或只做一件事情。

理解

该原则看上去非常简单明了,但这个设计原则备受争议却又极其重要,只有当亲身经历写过垃圾代码后,才能逐渐明白深意。

栗子

Volley中,HttpStack(HttpClientStack,HurlStack)类族就体现了该原则

public interface HttpStack {

   public HttpResponse performRequest(Request<?> request, Map<String,String> additionalHeaders)
       throws IOException, AuthFailureError;

}

HttpStack定义了一个执行网络请求的接口,只有一个performRequest函数。它的职责就很单一,而且清晰明确。如果需要修改网络请求相关代码,只需要修改HttpStack的实现,不会影响其它类的代码。

假如HttpStack的实现包含执行网络请求、解析网络请求、gzip压缩、封装请求参数,那在修改代码时必须谨慎,避免因修改而影响其它功能。

单一职责原则并不是说一个类只有一个函数,而是说这个类中的函数所做的工作是高度相关的,也就是高内聚。

查看HttpStack的实现HttpClientStack可以看出该类并不只有一个函数,但所做的工作都高度相关。

优点

  • 类的复杂性降低、实现什么职责都有清晰明确的定义。
  • 可读性提高,复杂性降低,那么当然可读性提高了。
  • 可维护性提高,可读性提高,那当然更容易维护。
  • 变更引起的风险降低,变更是必不可少的,如果接口的单一职责做得好,一个接口修改只对相应的实现类有影响,对其他的接口无影响,这对系统的扩展性、维护性都有非常大的帮助。

总结

从单一职责原则定义来看非常简单,但最大的问题就在于对职责的怎么定义,怎么划分类的职责,每个人的场景和问题都不一样,所以很多时候都需要靠个人经验来界定。

参考

  • 何红辉《Android 开发进阶 从小工到专家》
  • google/volley
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 单一职责原则 (SRP) 全称 SRP , Single Responsibility Principle 单一职...
    米莉_L阅读 5,727评论 2 5
  • 本文原创,转载请注明出处。欢迎关注我的 简书 ,关注我的专题 Android Class 我会长期坚持为大家收录简...
    MeloDev阅读 4,974评论 8 33
  • 目录: 设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒...
    加油小杜阅读 4,028评论 0 1
  • 困难我是不怕的,怕过程无聊。 上周四在UC Toastmaster认识了从事游戏内容运营的Buddy。在真正...
    CandiceChan阅读 6,678评论 1 4
  • “你真的认为你不会死吗?” 那个女人死死地盯着他,慢慢从山洞里走了出来,他蜷缩在盾牌后面,阳光把女人的身影照的发白...
    木mobi阅读 3,283评论 0 0