JAVA系列-设计模式-迭代器模式

来源:互联网 发布:stcisp正在检测单片机 编辑:程序博客网 时间:2024/06/05 08:03

定义:

提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。

我们的List遍历就是用迭代器模式实现的。

类图



package Iterator;/** * 迭代器定义访问和遍历元素的接口。 * @author Administrator * */public interface Iterator {Object next();        void first();        void last();        boolean hasNext();}

package Iterator;public class IteratorImpl implements Iterator {private List list;        private int index;        public IteratorImpl(List list) {        index = 0;        this.list = list;    }        public void first() {        index = 0;    }    public void last() {        index = list.getSize();    }    public Object next() {        Object obj = list.get(index);        index++;        return obj;    }    public boolean hasNext() {        return index < list.getSize();    }}

package Iterator;/** * 具体迭代器实现迭代器接口。      对该聚合遍历时跟踪当前位置。 * @author Administrator * */public interface List {Iterator iterator();        Object get(int index);        int getSize();        void add(Object obj);}

package Iterator;public class ListImpl implements List{private Object[] list;        private int index;        private int size;        public ListImpl() {        index = 0;        size = 0;        list = new Object[100];    }        public Iterator iterator() {        return new IteratorImpl(this);    }        public Object get(int index) {        return list[index];    }        public int getSize() {        return this.size;    }        public void add(Object obj) {        list[index++] = obj;        size++;    }}

package Iterator;/** * 适用性    1.访问一个聚合对象的内容而无需暴露它的内部表示。    2.支持对聚合对象的多种遍历。    3.为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代)。 * @author Administrator * */public class Test{public static void main(String[] args) {        List list = new ListImpl();        list.add("a");        list.add("b");        list.add("c");        //第一种迭代方式        Iterator it = list.iterator();        while (it.hasNext()) {            System.out.println(it.next());        }                System.out.println("=====");        //第二种迭代方式        for (int i = 0; i < list.getSize(); i++) {            System.out.println(list.get(i));        }    }}