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

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

定义

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

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

理解

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

栗子

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

public interface HttpStack {

   public HttpResponse performRequest(Request request, Map additionalHeaders)
       throws IOException, AuthFailureError;

}

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

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

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

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

优点

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

总结

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

参考

  • 何红辉《Android 开发进阶 从小工到专家》
  • google/volley

你可能感兴趣的:(面向对象设计原则——单一职责原则)