okhttp3中的設計模式

2021-08-27 11:00:54 字數 2186 閱讀 8825

okhttp庫的火熱程度,相信不需要我多作說明了,網上關於該庫的使用和原始碼分析的文章有如恆河沙數。我就不在這方面湊熱鬧了,本文從設計模式的角度來談談okhttp中都能找到哪些模式。本文所示okhttp版本為3.11.0。

builder

這個應該是很明顯的了。okhttpclientrequestresponsemultipartbodyhttpurl等等隨處可見,還如下面表示定義在rfc 6265中的cookie的類:

public final class cookie 

}

本來http是無狀態的,但是通過cookie機制,可以讓http有狀態,比如保持使用者登入狀態資訊。遺憾的是,許多伺服器實現並沒有使用cookie來儲存使用者登入狀態,而是使用其它一些自定義的請求頭。

factory method

如果簡單工廠也算設計模式的話,在okhttp中倒是有很多。不過工廠方法卻用的不多。下面是其中2個:

public inte***ce call extends cloneable 

}public inte***ce websocket

}

observer

觀察者有兩個,乙個是eventlistener,另乙個是websocketlistener。兩者都可以看作是生命週期***,前者監聽請求/響應,後者監聽web socket。

public abstract class eventlistener 

public void requestheadersend(call call, request request) {}

public void requestbodystart(call call) {}

public void requestbodyend(call call, long bytecount) {}

public void responseheadersstart(call call) {}

public void responseheadersend(call call, response response) {}

public void responsebodystart(call call) {}

public void responsebodyend(call call, long bytecount) {}

...}

上面列出的方法被稱作request events:

graph

lrrequestheaders

--> requestbody

requestbody

--> responseheaders

responseheaders

--> responsebody

singleton

雖然很不想說,但下面這個確實可以看作是乙個單例:no_mouth::

public class platform 

...}

strategy

無論是原始碼,還是注釋中很多地方都有strategy、policy這樣的單詞,但真正是策略模式的筆者只發現了cookiejar,定義了管理cookie的方法:

public inte***ce cookiejar
其它諸如cachestrategyconnectionspecselector,筆者認為都不是策略模式。

chain of responsibility

okhttp中最核心的部分當屬它的http請求***(interceptor)了,這裡是乙個責任鏈模式。你們以為我要大談特談它了嗎?錯了,本文到這裡就算結束了,關於***的內容,網上太多了,我就不去增加重複的資訊了。

written with stackedit.

OKHttp3學習記錄

一 概述 okhttp作為時下android開發最火熱的網路請求框架,學習下還是很有必要的,記錄學習過程方便以後查詢,guthub位址在android studio中新增依賴 新增網路許可權 二 使用 主要分為這幾步 1.建立okhttpclient物件 2.建立request包括請求體,具體為引數...

OkHttp3簡單使用

複製 目前最新的穩定版可能已經不是3.11.0了,可以到官方github來檢視最新版本 github.com square okht get 預設就是get請求,可以不寫 複製 與get相比,post多了乙個請求體 requestbody 複製 string url 複製 okhttpclient ...

okhttp3學習筆記

面試使人能夠更正確的認識自己,通過這一輪的面試,我發現自己的基礎知識還是有欠缺的。而且我的記性是真不好,很多寫過的 通過很長時間的思考和摸索才做出來的效果,過不了多久都忘了,因此我決定把平時常用的,我寫專案的過程中遇到的困難,解決的方法都一一記錄下來,同時,也把平時學習新知識的筆記寫在這裡。這一篇記...