Iterator 迭代器模式

簡介:

提供一種方法順序的訪問一個聚合對象中各個元素,而又不暴露該對象的內部表示數組

模式結構:

image
一、Collection:抽象集合接口
二、Iterator:抽象迭代器接口
三、Arraylist、HashSet:具體集合類,經過iterator()返回具體的迭代器對象
四、ArrayIterator、HashIterator:具體的迭代器ide

模式實例:

一、Collection:抽象集合接口

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

二、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;
 }
    }
}

三、Iterator_:迭代器接口

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

四、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);
 }
    }
}

image

相關文章
相關標籤/搜索