迭代器模式
来源:互联网 发布:楼层网络布局图 编辑:程序博客网 时间:2024/06/10 04:47
一句话定义
提供方法顺序访问容器(Array、List...)的元素,同时不暴露对象内部细节。
使用场景
容器对象需要遍历,同时不暴露内部。
实现要点
1. Iterator:迭代器接口,定义访问和遍历元素的接口。2. ConcreteIterarot:具体迭代器,遍历,并保存当前位置。3. Container:容器接口,创建迭代器接口。4. ConcreteContainer:具体容器。
情景假设
集合提供迭代器访问方法(集合本身就使用迭代器模式)
实现步骤
1. 创建迭代器接口
/** * 迭代器接口 * 提供访问、遍历元素的接口 * * @author fengzhen * @version 1.0, 2017/2/13 */public interface Iterator<T> { /** * 是否还有下个元素 */ boolean hasNext(); /** * 获取下一个元素 */ T next();}
2. 创建容器接口
/** * 容器类接口 * 提供获取迭代器接口 * * @author fengzhen * @version 1.0, 2017/2/13 */public interface Container<T> { void add(T obj); void remove(T obj); /** * 返回迭代器对象 */ Iterator getIterator();}
3. 创建具体迭代器
/** * 具体迭代器 * * @author fengzhen * @version 1.0, 2017/2/13 */public class ConcreteIterator implements Iterator{ // 容器数据 private List containers; // 当前遍历位置 private int position = 0; public ConcreteIterator(List containers) { this.containers = containers; } @Override public boolean hasNext() { return !(containers.size() <= position); } @Override public Object next() { if (hasNext()){ return containers.get(position++); } return null; }}
4. 创建具体容器
/** * 具体容器类 * * @author fengzhen * @version 1.0, 2017/2/13 */public class ConcreteContainer implements Container<String>{ private List<String> strings = new ArrayList<>(); @Override public void add(String obj) { strings.add(obj); } @Override public void remove(String obj) { strings.remove(obj); } @Override public Iterator getIterator() { return new ConcreteIterator(strings); }}
5. 使用
ConcreteContainer concreteContainer = new ConcreteContainer(); concreteContainer.add("第1条"); concreteContainer.add("第2条"); concreteContainer.add("第3条"); concreteContainer.add("第4条"); Iterator iterator = concreteContainer.getIterator(); while (iterator.hasNext()){ Log.i("info", "onCreate: ==++" + iterator.next()); }
迭代器模式仅作了解,实际应用基本不需要!
1 0
- 行为模式-迭代器模式
- 设计模式-迭代器模式
- 设计模式 迭代器模式
- 设计模式-迭代器模式
- 设计模式--迭代器模式
- 【设计模式】迭代器模式
- 设计模式-迭代器模式
- 设计模式- 迭代器模式
- 设计模式 - 迭代器模式
- 设计模式:迭代器模式
- 行为模式-迭代器模式
- 设计模式 - 迭代器模式
- 设计模式-迭代器模式
- 设计模式--迭代器模式
- 设计模式---迭代器模式
- 设计模式---迭代器模式
- 【设计模式】迭代器模式
- 设计模式 迭代器模式
- Task 异常处理 线程取消 局部变量问题
- IOS drawRect 重绘
- Opencv的Mat多图像合成坑
- Windows设置VMware开机自动启动,虚拟机也启动
- springmvc+mybatis登录验证2.0(更新了使用session来进行保存用户值,注销后清除session),并进行了拦截器的设定
- 迭代器模式
- html5 ajax文件上传
- 算法学习
- test
- iOS去掉html 的转义符号
- JDK1.8新特性(二)Lambda表达式入门
- 命令行小游戏Beta1.0
- Error:Execution failed for task ':DistAndroidMapPhone:transformClassesWithDexForDebug
- 对IEEE 802.15.4中Slotted CSMA-CA的理解