设计模式之迭代器模式

迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。

核心结构
  1、集合:一个接口,规定了具体集合需要实现的操作。
  2、具体集合:具体集合石实现了集合接口的一个实例,具体的集合按照一定的结构存储对象。具体集合应该有一个方法,该方法返回一个针对该集合的具体迭代器。
  3、迭代器:一个接口,规定了遍历具体集合的方法,比如next()方法。
  4、具体迭代器:实现了迭代器接口的类的实例。具体迭代器在实现迭代器接口所规定的遍历集合的方法时,比如next()方法,要保证首次调用将按着集合的数据结构找到该集合的一个对象,并且每当找到集合中的一个对象,立即根据该集合的存储结构得到待遍历的后继对象的引用,并保证一次调用next()方法可以遍历集合。

结构图:


java代码示例

interface Iterator {
	Object First();
	Object Next();
	boolean IsDone();
	Object CurrentItem();
}

abstract class Aggregate {
	abstract Iterator CreateIterator();
}

class ConcreteIterator implements Iterator {
	private List<Object> list = new ArrayList<Object>();
	private int curr = 0;

	public ConcreteIterator(List<Object> list) {
		this.list = list;
	}

	public Object First() {
		return list.get(0);
	}

	public Object Next() {
		Object ret = null;
		curr++;
		if (curr < list.size()) {
			ret = list.get(curr);
		}
		return ret;
	}

	public boolean IsDone() {
		return curr >= list.size() ? true : false;
	}

	public Object CurrentItem() {
		return list.get(curr);
	}
}

class ConcreteAggregate extends Aggregate {
	private List<Object> list = new ArrayList<Object>();

	public ConcreteAggregate(List<Object> list) {
		this.list = list;
	}

	public Iterator CreateIterator() {
		return new ConcreteIterator(list);
	}
}

class client {
	public static void main(String[] args) {
		List<Object> list = new ArrayList<Object>();
		list.add("miner");
		list.add("any");
		Aggregate agg = new ConcreteAggregate(list);
		Iterator iterator = agg.CreateIterator();
		iterator.First();
		while (!iterator.IsDone()) {
			System.out.println(iterator.CurrentItem());
			iterator.Next();
		}
	}
}
拓展连接

http://liuling123.com/2013/04/design-pattern-iterator.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值