Volley中的那些設(shè)計模式的身影~

文章摘要
1伟端、針對接口搭建的框架却舀,才能更好的兼容變化。
2肺稀、volley中那些設(shè)計原則以及模式的身影。


附:獲取Volley源代碼
Demos案例源碼:https://github.com/HailouWang/DemosForApi

從今天開始应民,會陸續(xù)介紹下Volley中那些實現(xiàn)機制以及設(shè)計模式话原,也歡迎大家將Volley的使用心得或者疑問發(fā)出來,大家一起Level Up ~

一诲锹、綜述

針對 接口/超類型 編程繁仁,會讓程序更好的兼容變化。這條設(shè)計原則归园,貫穿Volley工作流程實現(xiàn)的始終黄虱。我們可以數(shù)一下:

  • 1、Request:新建一個請求庸诱,不同的請求捻浦,不同的數(shù)據(jù)解析方法晤揣。
  • 2、Cache:緩存的處理朱灿,不同的處理昧识,不同的子類來實現(xiàn)。
  • 3母剥、Network:解析網(wǎng)絡(luò)數(shù)據(jù)滞诺。如果服務(wù)器有特定配置,可實現(xiàn)特定解析子類环疼。
  • 4习霹、HttpStack:網(wǎng)絡(luò)請求發(fā)送以及處理。不同的瀏覽器/不同的服務(wù)器炫隶,如果存在不同淋叶,提供了HurlStack、HttpClientStack不同的實現(xiàn)伪阶。
  • 5煞檩、RetryPolicy:請求失敗重試策略,可以針對具體的請求栅贴,實現(xiàn)自己的重試策略斟湃。

二、框架中的設(shè)計略影~

前面的幾篇檐薯,有些來自官網(wǎng)的Demos凝赛,有些來自作者自己編寫的案例,從整體上介紹了Volley的工作流程以及實現(xiàn)邏輯坛缕。同時墓猎,Volley作為一個短小但能力精悍的框架,還讓我們可以從中汲取更多設(shè)計的營養(yǎng)赚楚,從設(shè)計模式的角度毙沾,包括但不限于:

  • 1、設(shè)計原則:針對接口(超類型)編程宠页,而不是針對實現(xiàn)編程左胞。
    • 在Volley中,網(wǎng)絡(luò)請求封裝成Request(Request是一個超類型)举户。
    • 在Volley中烤宙,Request通過分發(fā),首先需要從緩沖中去檢索敛摘,不存在再去網(wǎng)絡(luò)上同步。在此處所有的實現(xiàn)乳愉,針對的是Cache/Network接口兄淫,例如:NetworkDispatcher屯远,組合引用了Cache/Network,而不是他們的實現(xiàn)類捕虽。
public class NetworkDispatcher extends Thread {
    /** The queue of requests to service. */
    private final BlockingQueue<Request<?>> mQueue;
    /** The network interface for processing requests. */
    private final Network mNetwork;
    /** The cache to write to. */
    private final Cache mCache;
  • 2慨丐、設(shè)計原則:找出應(yīng)用中可能需要變化的類,把他們獨立出來泄私,不要和那些不需要變化的代碼混在一起房揭。

如果代碼中,每次需求已更新晌端,都會使某方面的代碼發(fā)生變化捅暴,那么我們即可以肯定,這部分代碼應(yīng)該被處理出來咧纠,和其他代碼有所區(qū)分蓬痒。

例如:Request為什么要那么多的實現(xiàn)類?

Request實現(xiàn)類
  • 3漆羔、策略模式:定義了算法簇梧奢,分別封藏起來,讓他們之間可以互相替換演痒,此模式讓算法的變化獨立于使用算法的客戶亲轨。

HttpStack stack 是一個接口,定義了performRequest方法鸟顺,用于真正和網(wǎng)絡(luò)處理數(shù)據(jù)惦蚊,不同的Android平臺的設(shè)備,處理邏輯不同诊沪。組合接口的好處就是可以方便在不同的設(shè)備間切換养筒。

        if (stack == null) {
            if (Build.VERSION.SDK_INT >= 9) {
                stack = new HurlStack();
            } else {
                // Prior to Gingerbread, HttpUrlConnection was unreliable.
                // See: http://android-developers.blogspot.com/2011/09/androids-http-clients.html
                stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent));
            }
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市端姚,隨后出現(xiàn)的幾起案子晕粪,更是在濱河造成了極大的恐慌,老刑警劉巖渐裸,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巫湘,死亡現(xiàn)場離奇詭異,居然都是意外死亡昏鹃,警方通過查閱死者的電腦和手機尚氛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洞渤,“玉大人阅嘶,你說我怎么就攤上這事。” “怎么了讯柔?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵抡蛙,是天一觀的道長。 經(jīng)常有香客問我魂迄,道長粗截,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任捣炬,我火速辦了婚禮熊昌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘湿酸。我一直安慰自己婿屹,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布稿械。 她就那樣靜靜地躺著选泻,像睡著了一般森缠。 火紅的嫁衣襯著肌膚如雪某弦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天匙瘪,我揣著相機與錄音厢呵,去河邊找鬼窝撵。 笑死,一個胖子當(dāng)著我的面吹牛襟铭,可吹牛的內(nèi)容都是我干的碌奉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼寒砖,長吁一口氣:“原來是場噩夢啊……” “哼赐劣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起哩都,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤魁兼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后漠嵌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咐汞,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年儒鹿,在試婚紗的時候發(fā)現(xiàn)自己被綠了化撕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡约炎,死狀恐怖植阴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤掠手,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布热芹,位于F島的核電站,受9級特大地震影響惨撇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜府寒,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一魁衙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧株搔,春花似錦剖淀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至炮姨,卻和暖如春捌刮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舒岸。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工绅作, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛾派。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓俄认,卻偏偏與公主長得像,于是被迫代替她去往敵國和親洪乍。 傳聞我的和親對象是個殘疾皇子眯杏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容

  • 注:本文轉(zhuǎn)自http://codekk.com/open-source-project-analysis/deta...
    Ten_Minutes閱讀 1,301評論 1 16
  • 我們再來看看volley是怎么工作的。首先還是要帶著重點去看源碼壳澳,我們要關(guān)注的地方除了最核心的工作流程之外岂贩,還有一...
  • 我的博客: Volley 源碼分析 Volley 的使用流程分析 官網(wǎng)示例 創(chuàng)建一個請求隊列 RequestQue...
    realxz閱讀 2,042評論 1 11
  • 前言 在現(xiàn)在的Android開發(fā)之中,已經(jīng)比較少人使用volley進行網(wǎng)絡(luò)請求了钾埂,之所以現(xiàn)在還寫這篇關(guān)于Volle...
    Linear_Li閱讀 4,108評論 0 6
  • 在Volley 源碼解析及對 Volley 的擴展系列的第一篇文章中河闰,介紹了一種通過繼承 StringReques...
    lijiankun24閱讀 610評論 0 2