### 前言 回顧: [Okhttp的基本用法](https://www.jianshu.com/p/8e404d9c160f) [Okhttp3源碼解析(1)-OkHttpClient分析](https://www.jianshu.com/p/bf1d01b79ce7) [Okhttp3源碼解析( ...
### 前言 回顧: [Okhttp的基本用法](https://www.jianshu.com/p/8e404d9c160f) [Okhttp3源碼解析(1)-OkHttpClient分析](https://www.jianshu.com/p/bf1d01b79ce7) [Okhttp3源碼解析(2)-Request分析](https://www.jianshu.com/p/5a85345c8ea7) [Okhttp3源碼解析(3)-Call分析(整體流程)](https://www.jianshu.com/p/4ed79472797a) 上節我們講了okhttp的整體的流程,裡面的核心方法之一是`getResponseWithInterceptorChain()` ,這個方法應該知道吧?通過攔截器層層處理返回Response;這個方法中其實應用了責任鏈設計模式。今天主要講一下它是如何應用的! ### 責任鏈設計模式 ###### 責任鏈模式的定義 在責任鏈模式里,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。發出這個請求的客戶端並不知道鏈上的哪一個對象最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織和分配責任。 模型: ![](https://img2018.cnblogs.com/blog/1312938/201908/1312938-20190827082427829-283762395.png) 1.優點 耦合度降低,請求和處理是分開的 2.缺點 責任鏈太長或者每條鏈判斷處理的時間太長會影響性能。特別是遞歸迴圈的時候 不一定被處理,每個職責類的職責很明確,這就需要對寫預設的處理了 **責任鏈模式重要的兩點:分離職責,動態組合** 對責任鏈設計模式不明白的可以去網上那個找找實例看看, 這裡就不舉例子了。 ### 源碼中的責任鏈 話不多說,直接上`getResponseWithInterceptorChain()` 源碼 ``` Response getResponseWithInterceptorChain() throws IOException { // Build a full stack of interceptors. List