首页 > 代码库 > [设计模式-行为型]迭代器模式(Iterator)

[设计模式-行为型]迭代器模式(Iterator)

一句话

用过Java 的Iterator 的方法对这个就不会陌生了。

好处是提供一种方法访问一个容器对象中的各个元素,而又不暴露该容器对象的内部细节。


概括


技术分享

解析

迭代子模式:迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多个对象聚在一起形成的总体称之为聚集,聚集对象是能够包容一组对象的容器对象。迭代子模式将迭代逻辑封装到一个独立的子对象中,从而与聚集本身隔开。迭代子模式简化了聚集的界面。每一个聚集对象都可以有一个或一个以上的迭代子对象,每一个迭代子的迭代状态可以是彼此独立的。迭代算法可以独立于聚集角色变化。


实例

这里模仿一下java 中 List 类的 迭代器方法。

包含的类文件有:

一个迭代器的接口(Iterator.java)

一个迭代器的实现类(IteratorImpl.java)

一个容器类型的接口(List.java)

一个容器类型的实现类, 在这个类中,可以构造一个迭代器(ListImpl.java)

测试类 TestMain.java

/**   
 * @author oscar999   
 * @date 2015-1-6
 * @version V1.0   
 */
package designptn.iterator;

public interface Iterator {
	Object next();

	void first();

	void last();

	boolean hasNext();
}

/**   
 * @author oscar999   
 * @date 2015-1-6
 * @version V1.0   
 */
package designptn.iterator;


/**
 * @author Administrator
 * 
 */
public class IteratorImpl implements Iterator {
	private List list;
	private int index;

	public IteratorImpl(List list) {
		index = 0;
		this.list = list;
	}

	@Override
	public Object next() {
		// TODO Auto-generated method stub
		Object obj = list.get(index);
		index++;
		return obj;
	}

	@Override
	public void first() {
		// TODO Auto-generated method stub
		index = 0;
	}

	@Override
	public void last() {
		// TODO Auto-generated method stub
		index = list.getSize();
	}

	@Override
	public boolean hasNext() {
		// TODO Auto-generated method stub
		return index < list.getSize();
	}

}

/**   
 * @author oscar999   
 * @date 2015-1-6
 * @version V1.0   
 */
package designptn.iterator;

public interface List {
	Iterator iterator();

	Object get(int index);

	int getSize();

	void add(Object obj);
}

/**   
 * @author oscar999   
 * @date 2015-1-6
 * @version V1.0   
 */
package designptn.iterator;

public class ListImpl implements List {

	private Object[] list;
	private int index;
	private int size;

	public ListImpl() {
		index = 0;
		size = 0;
		list = new Object[100];
	}

	@Override
	public Iterator iterator() {
		// TODO Auto-generated method stub
		return new IteratorImpl(this);
	}

	@Override
	public Object get(int index) {
		// TODO Auto-generated method stub
		return list[index];
	}

	@Override
	public int getSize() {
		// TODO Auto-generated method stub
		return this.size;
	}

	@Override
	public void add(Object obj) {
		// TODO Auto-generated method stub
		list[index++] = obj;
		size++;
	}

}

/**   
 * @author oscar999   
 * @date 2015-1-6
 * @version V1.0   
 */
package designptn.iterator;

/**
 * @author Administrator
 *
 */
public class TestMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List list = new ListImpl();
		list.add("a");
		list.add("b");
		list.add("c");
		
		Iterator it = list.iterator();
		while(it.hasNext())
		{
			System.out.println(it.next());
		}
	}

}








[设计模式-行为型]迭代器模式(Iterator)