上一篇 OkHttp设计模式剖析(六)外观模式
下一篇 OkHttp设计模式剖析(八)工厂模式
OKHTTP:
由大名鼎鼎的Square公司开发的网络通信库。
设计模式:
软件开发中问题的解决套路。
迭代器模式简介
定义:提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示。
迭代器模式(Iterator Pattern)又称作游标(Cursor)模式,用于遍历一个容器对象,将遍历逻辑封装。大部分高级语言的容器类都为我们提供了响应的迭代器,基本不需要开发者实现,比如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),基本所有的缓存类都会像一个小数据库一样支持“增删改查”。既然有“查”的功能,那迭代器必不可少。
import java.util.Iterator;
// 将HTTP和HTTPS响应缓存到文件系统,以便可以重用它们,从而节省时间和带宽。
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() {......} // 删除
};
}
}
基于迭代器模式构建的其他代码
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、设计模式|菜鸟教程:https://www.runoob.com/design-pattern/design-pattern-tutorial.html
2、《Android源码设计模式解析与实战》何红辉,关爱民著
3、隔壁老李头:https://www.jianshu.com/p/82f74db14a18
网友评论