OkHttp設(shè)計模式剖析(七)迭代器模式

上一篇 OkHttp設(shè)計模式剖析(六)外觀模式

下一篇 OkHttp設(shè)計模式剖析(八)工廠模式

OKHTTP:

由大名鼎鼎的Square公司開發(fā)的網(wǎng)絡(luò)通信庫。

設(shè)計模式:

軟件開發(fā)中問題的解決套路。

迭代器模式簡介

定義:提供一種方法順序訪問一個容器對象中的各個元素洲炊,而又不需要暴露該對象的內(nèi)部表示。

迭代器模式(Iterator Pattern)又稱作游標(Cursor)模式僚稿,用于遍歷一個容器對象把兔,將遍歷邏輯封裝。大部分高級語言的容器類都為我們提供了響應(yīng)的迭代器煞抬,基本不需要開發(fā)者實現(xiàn),比如java的HashMap:

Map map=new HashMap();                
map.put("6", "伊涅斯塔");    
map.put("16", "布斯克茨");    
map.put("15", "拉莫斯");    
map.put("1", "卡西利亞斯");    
// import java.util.Iterator;           
Iterator iterator = map.keySet().iterator();     
while (iterator.hasNext()) {    
    Object key = iterator.next();    
    System.out.println("map.get(key) is :"+map.get(key));    
} 

所以构哺,對于迭代器模式革答,了解即可,自己寫的幾率不大曙强。

Cache 類中的迭代器模式

不僅是OkHttp中的緩存(Cache)残拐,基本所有的緩存類都會像一個小數(shù)據(jù)庫一樣支持“增刪改查”。既然有“查”的功能碟嘴,那迭代器必不可少溪食。

import java.util.Iterator;
// 將HTTP和HTTPS響應(yīng)緩存到文件系統(tǒng),以便可以重用它們娜扇,從而節(jié)省時間和帶寬错沃。
public final class Cache implements Closeable, Flushable {

  private final DiskLruCache cache;

  // 返回此緩存中URL的迭代器栅组。
  public Iterator<String> urls() throws IOException {
    return new Iterator<String>() {
      final Iterator<DiskLruCache.Snapshot> delegate = cache.snapshots();

      String nextUrl;
      boolean canRemove;

      @Override public boolean hasNext() {
        if (nextUrl != null) return true;

        canRemove = false; // 防止誤刪除
        while (delegate.hasNext()) {
          DiskLruCache.Snapshot snapshot = delegate.next();
          try {
            BufferedSource metadata = Okio.buffer(snapshot.getSource(ENTRY_METADATA));
            nextUrl = metadata.readUtf8LineStrict();
            return true;
          } catch (IOException ignored) {
          // 主機消失,跳過
          } finally {
            snapshot.close();
          }
        }

        return false;
      }
      @Override public String next() {......} //返回下一個URL
      @Override public void remove() {......} // 刪除
    };
  }
}

基于迭代器模式構(gòu)建的其他代碼

1枢析、Android中SQLiteDatabase的query方法
2玉掸、ListView控件在Adapter中配置迭代器

食堂排隊打飯都是迭代器

public static void main(String[] args){
    List<String> list=new ArrayList<String>();                
    list.add("老板,來份老麻抄手");    
    list.add("老板醒叁,來份宜賓燃面");    
    list.add("老板司浪,來份重慶小面");       
       
    for(Iterator<String> it=list.iterator();it.hasNext();){
        System.out.println(it.next());
    }
}
/* 輸出
老板,來份老麻抄手
老板把沼,來份宜賓燃面
老板断傲,來份重慶小面
*/

參考文獻

1、設(shè)計模式|菜鳥教程:https://www.runoob.com/design-pattern/design-pattern-tutorial.html
2智政、《Android源碼設(shè)計模式解析與實戰(zhàn)》何紅輝认罩,關(guān)愛民著
3、隔壁老李頭:http://www.reibang.com/p/82f74db14a18

上一篇 OkHttp設(shè)計模式剖析(六)外觀模式

下一篇 OkHttp設(shè)計模式剖析(八)工廠模式

All is well.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末续捂,一起剝皮案震驚了整個濱河市垦垂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌牙瓢,老刑警劉巖劫拗,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異矾克,居然都是意外死亡页慷,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門胁附,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酒繁,“玉大人,你說我怎么就攤上這事控妻≈萏唬” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵弓候,是天一觀的道長郎哭。 經(jīng)常有香客問我,道長菇存,這世上最難降的妖魔是什么夸研? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮依鸥,結(jié)果婚禮上亥至,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好抬闯,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布井辆。 她就那樣靜靜地躺著关筒,像睡著了一般溶握。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蒸播,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天睡榆,我揣著相機與錄音,去河邊找鬼袍榆。 笑死胀屿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的包雀。 我是一名探鬼主播宿崭,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼才写!你這毒婦竟也來了葡兑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赞草,失蹤者是張志新(化名)和其女友劉穎讹堤,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厨疙,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡洲守,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沾凄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梗醇。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖撒蟀,靈堂內(nèi)的尸體忽然破棺而出婴削,到底是詐尸還是另有隱情,我是刑警寧澤牙肝,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布唉俗,位于F島的核電站,受9級特大地震影響配椭,放射性物質(zhì)發(fā)生泄漏虫溜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一股缸、第九天 我趴在偏房一處隱蔽的房頂上張望衡楞。 院中可真熱鬧,春花似錦敦姻、人聲如沸瘾境。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迷守。三九已至犬绒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間兑凿,已是汗流浹背凯力。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留礼华,地道東北人咐鹤。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像圣絮,于是被迫代替她去往敵國和親祈惶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

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