简介:

提供一种办法程序的拜访一个聚合对象中各个元素,而又不裸露该对象的外部示意

模式构造:


1、Collection:形象汇合接口
2、Iterator:形象迭代器接口
3、Arraylist、HashSet:具体汇合类,通过iterator()返回具体的迭代器对象
4、ArrayIterator、HashIterator:具体的迭代器

模式实例:

1、Collection:形象汇合接口

public interface Collection<E> {    public void add(E o); int size(); Iterator_ iterator();}

2、Arraylist_:实现Collection接口的汇合类

/** * 相比与数组,这个容器不必思考边界问题,能够动静扩大 */public class Arraylist_<E> implements Collection<E> {    E[] objects = (E[])new Object[10]; //objects中下一个空的地位在哪儿,或者说目前容器中有多少个元素 private int index = 0; public void add(E o) {        if(index == objects.length){            E[] newObjects = (E[])new Object[objects.length * 2]; System.arraycopy(objects,0,newObjects,0,objects.length); objects = newObjects; }        objects[index] = o; index++; }    public int size(){return index;}    @Override public Iterator_ iterator() {        return new ArraylistIterator(); }    private class ArraylistIterator<E> implements Iterator_<E> {        private int currentIndex = 0; @Override public boolean hasNext() {            if(currentIndex >= index) {                return false; }            return true; }        @Override public E next() {            E o = (E) objects[currentIndex]; currentIndex++; return o; }    }}

3、Iterator_:迭代器接口

public interface Iterator_<E> {    boolean hasNext(); E next();}

4、Main: 测试

public class Main {    public static void main(String[] args) {        Collection<String> list = new Arraylist_<String>(); for(int i = 0; i<15; i++) {            list.add(new String("s"+i)); }        System.out.println(list.size()); Iterator_<String> it = list.iterator(); while (it.hasNext()){            String o = it.next(); System.out.println(o); }    }}