>Java >java지도 시간 >Java에서 Iterator 패턴을 구현하는 방법에 대한 코드 예

Java에서 Iterator 패턴을 구현하는 방법에 대한 코드 예

黄舟
黄舟원래의
2017-03-11 11:13:532069검색

클래스 다이어그램


/**
 * 自定义集合接口, 类似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);
		}
	}
}

인쇄

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

위 내용은 Java에서 Iterator 패턴을 구현하는 방법에 대한 코드 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.