《Android源码设计模式》读书笔记 (14) 第14章 迭代器模式
来源:互联网 发布:淘宝还可以买梦幻币吗 编辑:程序博客网 时间:2024/06/06 17:10
前言
- 迭代器模式,又称为游标模式(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(); } }}
总结
- 源码下载
0 0
- 《Android源码设计模式》读书笔记 (14) 第14章 迭代器模式
- 《Android源码设计模式》读书笔记 (1) 第1章 单例模式
- 《Android源码设计模式》读书笔记 (4) 第4章 原型模式
- 《Android源码设计模式》读书笔记 (5) 第5章 工厂模式
- 《Android源码设计模式》读书笔记 (12) 第12章 观察者模式
- 《Android源码设计模式》读书笔记 (6) 第6章 抽象工厂模式
- 《Android源码设计模式》读书笔记 (7) 第7章 策略模式
- 《Android源码设计模式》读书笔记 (8) 第8章 状态模式
- 《Android源码设计模式》读书笔记 (9) 第9章 责任链模式
- 《Android源码设计模式》读书笔记 (10) 第10章 解释器模式
- 《Android源码设计模式》读书笔记 (11) 第11章 命令模式
- 《Android源码设计模式》读书笔记 (13) 第13章 备忘录模式
- 《Android源码设计模式》读书笔记 (15) 第15章 模板方法模式
- 《Android源码设计模式》读书笔记 (16) 第16章 访问者模式
- 《Android源码设计模式》读书笔记 (17) 第17章 中介者模式
- 《Android源码设计模式》读书笔记 (18) 第18章 代理模式
- 《Android源码设计模式》读书笔记 (19) 第19章 组合模式
- 《Android源码设计模式》读书笔记 (20) 第20章 适配器模式
- 栈的使用和模拟
- mysql “group by ”与"order by"的研究--分类中最新的内容
- 初学c/c++出现的一些易混淆概念
- utumno - 7
- MySql数据引擎简介与选择方法
- 《Android源码设计模式》读书笔记 (14) 第14章 迭代器模式
- Java基础经典总结
- [LeetCode]130. Surrounded Regions
- leetcode 37. Sudoku Solver
- iosiPhone屏幕尺寸、分辨率及适配
- 神经网络入门基础知识 neural networks basics
- WinCE 下怎么获取路由表和增加路由?
- 面试题79:抽奖算法实现
- mac下使用github 上传代码