美文网首页
面向对象设计原则——单一职责原则

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

作者: Walkud | 来源:发表于2018-01-22 17:55 被阅读17次

    单一职责原则(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

    相关文章

      网友评论

          本文标题:面向对象设计原则——单一职责原则

          本文链接:https://www.haomeiwen.com/subject/qskmwttx.html