行为型模式之迭代器模式

迭代器模式

迭代器模式
/**
 * 迭代器模式
 * 提供一种方法访问一个容器对象中各个元素,而又不暴露对象内部的细节。
 *
 * 迭代器模式涉及4个角色:
 * 1.抽象迭代器角色 (定义访问和遍历元素的接口)
 * 2.具体迭代器角色 (实现Iterator接口,完成元素遍历)
 * 3.抽象聚合(提供创建迭代器的接口)
 * 4.具体聚合 (创建出容纳迭代器的对象)
 */
public class IteratorPattern {

    //抽象迭代器角色
    interface Iterator{
        Object next();
        boolean hasNext();
    }
    //具体迭代器角色
    class ConcreteIterator implements Iterator{
        private ConcreteAggregate agg;
        private int index;
        private int size;

        public ConcreteIterator(ConcreteAggregate agg) {
            this.agg = agg;
            this.index = 0;
            this.size = agg.size();
        }

        @Override
        public Object next() {
            if(index < size)
                return agg.getElement(index);
            else
                return null;
        }

        @Override
        public boolean hasNext() {
            return index < size;
        }
    }
    //抽象聚合
    interface Aggregate{
        void add(Object obj);
        Iterator createIterator();
    }

    //具体聚合
    class ConcreteAggregate implements Aggregate{
        private Vector vector = new Vector();
        public void add(Object obj){
            this.vector.add(obj);
        }
        public Object getElement(int index){
            if(index < vector.size()){
                return vector.get(index);
            }else
                return null;
        }
        public int size (){
            return this.vector.size();
        }
        public Iterator createIterator(){
            return new ConcreteIterator(this);
        }
    }

    public void main(String[] args) {
        Aggregate agg = new ConcreteAggregate();
        agg.add("1");
        agg.add("2");
        agg.add("3");
        //遍历
        Iterator iterator = agg.createIterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

你可能感兴趣的:(行为型模式之迭代器模式)