Heim  >  Artikel  >  Java  >  Codebeispiel für die Implementierung des Iterator-Musters in Java

Codebeispiel für die Implementierung des Iterator-Musters in Java

黄舟
黄舟Original
2017-03-11 11:13:532013Durchsuche

Klassendiagramm


/**
 * 自定义集合接口, 类似java.util.Collection
 * 用于数据存储
 * @author stone
 *
 */
public interface ICollection<T> {
	
	IIterator<T> iterator(); //返回迭代器
	void add(T t);
	T get(int index);
}
/**
 * 自定义迭代器接口 类似于java.util.Iterator
 * 用于遍历集合类ICollection的数据
 * @author stone
 *
 */
public interface IIterator<T> {
	boolean hasNext();
	boolean hasPrevious();
	T next();
	T previous();
}
/**
 * 集合类, 依赖于MyIterator
 * @author stone
 */
public class MyCollection<T> implements ICollection<T> {

	private T[] arys;
	private int index = -1;
	private int capacity = 5;
	
	public MyCollection() {
		this.arys = (T[]) new Object[capacity];
	}
	
	@Override
	public IIterator<T> iterator() {
		return new MyIterator<T>(this);
	}
	
	@Override
	public void add(T t) {
		index++;
		if (index == capacity) {
			capacity *= 2;
			this.arys = Arrays.copyOf(arys, capacity);
			
		}
		this.arys[index] = t;
	}
	
	@Override
	public T get(int index) {
		return this.arys[index];
	}
	
}
/*
 * 迭代器(Iterator)模式 又叫做游标(Cursor)模式
 * 提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。
 * Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据
 * 
 * 若有新的存储结构,可new 一个ICollection, 对应的 new 一个IIterator来实现它的遍历
 */
@SuppressWarnings({"rawtypes", "unchecked"})
public class Test {
	public static void main(String[] args) {
		ICollection<Integer> collection = new MyCollection<Integer>();
		add(collection, 3, 5, 8, 12, 3, 3, 5);
		for (IIterator<Integer> iterator = collection.iterator(); iterator.hasNext();) {
			System.out.println(iterator.next());
		}
		
		System.out.println("-------------");
		
		ICollection collection2 = new MyCollection();
		add(collection2, "a", "b", "c", 3, 8, 12, 3, 5);
		for (IIterator iterator = collection2.iterator(); iterator.hasNext();) {
			System.out.println(iterator.next());
		}
		
	}
	
	static <T> void  add(ICollection<T> c, T ...a) {
		for (T i : a) {
			c.add(i);
		}
	}
}

Drucken

3
5
8
12
3
3
5
-------------
a
b
c
3
8
12
3
5

Das obige ist der detaillierte Inhalt vonCodebeispiel für die Implementierung des Iterator-Musters in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn