类图

/** * 自定义集合接口, 类似java.util.Collection * 用于数据存储 * @author stone * */ public interface ICollection{ IIterator iterator(); //返回迭代器 void add(T t); T get(int index); }
/** * 自定义迭代器接口 类似于java.util.Iterator * 用于遍历集合类ICollection的数据 * @author stone * */ public interface IIterator{ boolean hasNext(); boolean hasPrevious(); T next(); T previous(); }
/** * 集合类, 依赖于MyIterator * @author stone */ public class MyCollectionimplements ICollection { private T[] arys; private int index = -1; private int capacity = 5; public MyCollection() { this.arys = (T[]) new Object[capacity]; } @Override public IIterator iterator() { return new MyIterator (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 collection = new MyCollection();
add(collection, 3, 5, 8, 12, 3, 3, 5);
for (IIterator 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 void add(ICollection 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











