《Android源码设计模式》读书笔记 (14) 第14章 迭代器模式
2016-04-13 15:32
465 查看
前言
迭代器模式,又称为游标模式(Cursor);是行为型设计模式之一.迭代器模式源于对容器的访问,比如Java中List\Map\数组等,我们知道对容器对象的访问必然会涉及遍历算法,我们可以将遍历的方法封装在容器中.在客户访问类与容器之间插入了一个第三种–迭代器,很好地解决了上面所述的弊端.
因为众多语言内部也有众多容器体的定义,也有相应的迭代器.因此迭代器模式更多的是了解而非应用.
正文
定义:提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示.使用场景:遍历一个容器对象时
优点:支持以不同的方式去遍历一个容器对象
UML类图
Iterator:迭代器接口.负责定义\访问和遍历元素的接口
/** * 迭代器接口,负责定义\访问和遍历元素的接口 * Created by max on 2016/4/13. */ public interface Iterator<T> { /** * 是否还有下一个元素 * @return true表示有 */ boolean hasNext(); /** * 返回当前位置的元素并将位置移至下一位 * @return */ T next(); }
ConcreteIterator:具体迭代器类,主要是实现迭代器接口,并记录遍历的当前位置
/** * 具体迭代器类,主要是实现迭代器接口,并记录遍历的当前位置 * Created by max on 2016/4/13. */ public class ConcreteIterator<T> implements Iterator<T>{ private List<T> list = new ArrayList<>(); private int cursor = 0; public ConcreteIterator(List<T> list) { this.list = list; } @Override public boolean hasNext() { return cursor != list.size(); } @Override public T next() { T obj = null; if (this.hasNext()) obj = this.list.get(cursor++); return obj; } }
Aggregate:容器接口.负责提供创建具体迭代器角色的接口
/** * 容器接口.负责提供创建具体迭代器角色的接口 * Created by max on 2016/4/13. */ public interface Aggregate<T> { /** * 添加一个元素 * @param obj 元素 */ void add(T obj); /** * 移除一个元素 * @param obj */ void remove(T obj); /** * 获取容器的迭代器 * @return 迭代器对象 */ Iterator<T> iterator(); }
ConcreteAggregate:具体容器类,具体迭代器角色与该容器相关联.
/** * 具体容器类,具体迭代器角色与该容器相关联 * Created by max on 2016/4/13. */ public class ConcreteAggregate<T> implements Aggregate<T> { private List<T> list = new ArrayList<>(); @Override public void add(T obj) { list.add(obj); } @Override public void remove(T obj) { list.remove(obj); } @Override public Iterator<T> iterator() { return new ConcreteIterator<T>(list); } }
Client:客户类
/** * 客户类 * Created by max on 2016/4/13. */ public class Client { public static void main(String args[]){ Aggregate<String> a = new ConcreteAggregate<>(); a.add("第一个"); a.add("第二个"); a.add("第三个"); a.add("第四个"); Iterator<String> i = a.iterator(); //其实这里就是迭代器遍历容器的元素,内部还是list实现的 while(i.hasNext()){ i.next(); } } }
总结
源码下载相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories