Java设计模式《十六》迭代器模式

来源:互联网 发布:windows仿mac软件 编辑:程序博客网 时间:2024/05/23 19:45
//迭代器 模式 提供一种方法顺序访问一个聚合对象中各个元素 而又不暴露该对象的内部表示//迭代器模式分离了集合对象的遍历行为 抽象出一个迭代器类来负责 这样可以做到不暴露集合的内部结构//又可以让外部代码透明地访问集合内部的数据
//聚集抽象类public abstract class Aggregate{    public abstract int getCount();    public abstract Object get(int index);    public abstract void set(int index,Object obj);    public abstract void Iterator createIterator(); }//具体聚集类public class ConcreteAggrete extends Aggregate{    private List<Object> items = new ArrayList<Object>();    public Iterator createIterator(){        return new ConcreteIterator(this);    }    public int getCount(){        return items.size();    }    public Object get(int index){        return items.get(index);    }    public void get set(int index, Object obj){        items.add(index,obj);    }}
//迭代器抽象类 用于定义得到开始镀锡得到下一个对象//判断是否得到结尾 当前对象等抽象方法 统一接口public abstract class Iterator{    public abstract Object first();    public abstract Object next();    public abstract boolean next();    public abstract Object currentItem();}//具体迭代器类public class ConcreteIterator extends Iterator{    private ConcreteAggrete aggregate;    private int current =0;    public ConcreteIterator(ConcreteAggrete aggregate){//初始化 将具体的聚集对象传入        this.aggregate = aggregate;    }    public Object first(){        return aggregate.get(0);    }    public Object next(){        Object ret = null;        current++;        if(current<aggregate.getCount()){            ret =aggregate.get(current);        }        return ret;    }    public boolean hasNext(){        return current >= aggregate.getCount()? true : false;    }    public Object currentItem(){        return aggregate.get(current);    }}
/** * 迭代器模式,提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 *  * 迭代器模式分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构, * 又可让外部代码透明地访问集合内部的数据。 */public class TestIterator {    public static void main(String[] args) {        ConcreteAggregate a = new ConcreteAggregate();        a.set(0, "a");        a.set(1, "b");        a.set(2, "c");        Iterator iterator = new ConcreteIterator(a);        while(!iterator.hasNext()){            System.out.println(iterator.currentItem());            iterator.next();        }    }}
0 0