设计模式之迭代器模式
2015-10-12 16:35
405 查看
1、核心
提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。2、应用场景
JDK中内置迭代器(List/Set)3、结构
-聚合对象:存储数据-迭代器:遍历数据
4、代码示例
/** * 聚合接口 * @author ly1 * */ public interface Aggregation { void add(Object obj); void remove(Object obj); Object get(int index); MyIterator getIterator(); }
/** * 具体聚合类,将具体迭代器定义为内部类 * @author ly1 * */ public class ConcreteAggregation implements Aggregation{ private List list = new ArrayList(); @Override public void add(Object obj){ list.add(obj); } @Override public void remove(Object obj){ list.remove(obj); } @Override public Object get(int index){ return list.get(index); } @Override public MyIterator getIterator() { return new ConcreteIterator(); } private class ConcreteIterator implements MyIterator{ private int cursor = -1; @Override public boolean hasNext() { return ++cursor < list.size(); } @Override public Object Current() { return cursor < list.size() ? list.get(cursor) : null; } } }
/** * 迭代器接口 * @author ly1 * */ public interface MyIterator { /** * 判断是有下个元素 * @return */ boolean hasNext(); /** * 获取当前游标指向的对象 * @return */ Object Current(); }
/** * 客户端调用 * @author ly1 * */ public class Client { public static void main(String[] args) { Aggregation set = new ConcreteAggregation(); set.add(new String("aa")); set.add(new String("bb")); set.add(new String("cc")); //获取迭代器 MyIterator iter = set.getIterator(); while(iter.hasNext()){ System.out.println(iter.Current()); } } } 结果: aa bb cc
相关文章推荐
- struts2 Result类型(跳转)
- sonarqube添加新的控制器的步骤
- java核心技术卷二文件输入输出总结
- 复杂度1 最大子列和问题 --C语言学习种种
- spss如何使用K-S进行正态性检验
- 第四周项目2-建立"单链表"算法库
- java拾遗之关键字for相关
- 第4周实践项目4 - 建设双链表算法库
- iOS UITableView
- jstat
- 项目3 -- 负数把正数赶出队列
- 第7周项目1——建立顺序环形队列算法库
- 第6周 项目1 - 建立顺序栈算法库
- linux下如何增加LVM磁盘空间
- psutil
- Git常用命令
- 蓝牙协议栈分析
- Android自定义view之环形等待控件的实现
- LimeJS指南7
- Delphi7中的Char和XE中的Char