上一篇 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