研磨设计模式之迭代器
来源:互联网 发布:淘宝客服应聘个人简历 编辑:程序博客网 时间:2024/04/30 01:39
聚合
指一组对象的组合结构,如Java中的集合、数组等
迭代器模式
提供一种方法,顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示
目标
以一个统一的方式来访问内部实现不同的聚合对象
示例代码
- 迭代器接口
/** * 迭代器接口,定义访问和遍历元素的操作 * */public interface Iterator { /** * 移动到聚合对象的第一个位置 */ public void first(); /** * 移动到聚合对象的下一个位置 */ public void next(); /** * 判断是否已经移动到聚合对象的最后一个位置 * @return true表示已经移动到聚合对象的最后一个位置 * false 表示还没有移动到聚合对象的最后一个位置 */ public boolean isDone(); /** * 获取迭代的当前元素 * @return 迭代的当前元素 */ public Object currentItem();}
- 聚合对象的接口
/** * 聚合对象的接口,定义创建相应迭代器对象接口 * */public abstract class Aggregate { /** * 工厂方法,创建相应迭代器对象的接口 * @return 相应迭代器对象的接口 */ public abstract Iterator createIterator();}
- 迭代器实现对象
/** * 具体的迭代器实现对象,示意的是聚合对象为数组的迭代器 * 不同的聚合对象,相应的迭代器实现是不一样的 */public class ConcreteIterator implements Iterator{ /** * 持有被迭代的具体的聚合对象 */ private ConcreteAggregate aggregate; /** * 内部索引,记录当前被迭代到的索引位置 * -1 表示刚开始的时候,迭代器指向聚合对象第一个元素之前 */ private int index = -1; /** * 构造方法,传入被迭代的具体的聚合对象 * @param aggregate 被迭代的具体的聚合对象 */ public ConcreteIterator(ConcreteAggregate aggregate) { this.aggregate = aggregate; } @Override public void first() { index = 0; } @Override public void next() { if(index < this.aggregate.size()) { index = index + 1; } } @Override public boolean isDone() { if(index == this.aggregate.size()) { return true; } return false; } @Override public Object currentItem() { return this.aggregate.get(index); }}
- 具体的聚合对象
/** * 具体的聚合对象,实现创建相应迭代器对象的功能 * */public class ConcreteAggregate extends Aggregate{ /** * 聚合对象的具体内容 */ private String[] array = null; /** * 构造方法,传入聚合对象具体的内容 * @param array 聚合对象具体的内容 */ public ConcreteAggregate(String[] array) { this.array = array; } @Override public Iterator createIterator() { return new ConcreteIterator(this); } /** * 获取索引相对应的元素 * @param index 索引 * @return 索引相对应的元素 */ public Object get(int index) { Object ret = null; if(index<array.length) { ret = array[index]; } return ret; } /** * 获取聚合对象的大小 * @return 聚合对象的大小 */ public int size() { return this.array.length; }}
- 使用示例
String[] names = {"张三","李四","王五","赵六"};//创建聚合对象Aggregate aggregate = new ConcreteAggregate(names);//循环输出聚合对象中的值Iterator it = aggregate.createIterator();//首先设置迭代器到第一个元素it.first();while(!it.isDone()) { Object obj = it.currentItem(); System.out.println(obj); it.next();}
阅读全文
0 0
- 研磨设计模式之迭代器
- 研磨设计模式之迭代器业务场景
- 研磨设计模式之策略模式-1
- 研磨设计模式之策略模式-2
- 研磨设计模式之策略模式-3
- 研磨设计模式之策略模式-4
- 研磨设计模式之策略模式-5
- 研磨设计模式之策略模式-6
- 研磨设计模式之 命令模式
- 研磨设计模式之 装饰模式-4
- 研磨设计模式之 装饰模式-1
- 研磨设计模式之 装饰模式-2
- 研磨设计模式之 装饰模式-3
- 研磨设计模式之 命令模式-1
- 研磨设计模式之 命令模式-2
- 研磨设计模式之 命令模式-3
- 研磨设计模式之 策略模式-1
- 研磨设计模式之 策略模式-2
- DOM操作
- Maximum Subsequence Sum
- hdu1556涂气球
- Shuffle和排序
- jQuery操作DOM
- 研磨设计模式之迭代器
- 17.9.26日报
- MATLAB 快捷键大全以及一些实用技巧(整理,并经过试验) ----R2017a
- makefile——自动编译src目录下所有源文件
- $_FILES数组详解
- JDBC自定义异常
- 简单工厂模式(Simple Factory)
- 【Python-2.7】if-elif-else
- 内部类的定义