设计模式-行为型- 迭代器模式(Iterator)

来源:互联网 发布:2016中国域名备案后缀 编辑:程序博客网 时间:2024/04/29 12:48

定义

又叫游标(Cursor)模式,提供一种方法访问一个容器(container)对象中的各个元素,而又不暴露该对象的内部细节

角色

迭代器角色(Iterator):负责定义访问和遍历元素的接口

具体迭代器角色(Concrete Iterator):实现迭代器接口,并要记录遍历中的当前位置

容器角色(Container):负责提供创建具体迭代器角色的接口

具体容器角色(Concrete Container):实现创建具体迭代器角色的接口, 这个具体迭代器角色与该容器的结构相关

优点

  • 它支持以不同的方式遍历一个聚合对象
  • 在同一个聚合上可以有多个遍历
  • 增加新的聚合类和迭代器类都很方便,无须修改原有代码

缺点

  • 新增一个聚合类,就要相应的实现一个迭代器类,类的个数增多

适用场景

  • 访问一个对象的内容,又不想暴露对象的内部结构
  • 对对象进行遍历

类图

Iterator

package com.vapy.behavior.Iterator;/** *  * @author vapy 2016年8月27日 *  */public interface Aggregat {    public Iterator createIterator();    public void add(Object obj);}
package com.vapy.behavior.Iterator;import java.util.Vector;/** *  * @author vapy 2016年8月27日 *  */public class ConcreteAggregat implements Aggregat {    private Vector<Object> vector = null;    public Vector<Object> getVector() {        return vector;    }    public void setVector(Vector<Object> vector) {        this.vector = vector;    }    public ConcreteAggregat(){        vector = new Vector<Object>();    }    @Override    public void add(Object obj) {        vector.add(obj);    }    @Override    public Iterator createIterator() {        return new ConcreteIterator(vector);    }}
package com.vapy.behavior.Iterator;/** *  * @author vapy 2016年8月27日 *  */public interface Iterator {    public Object next();    public Object currentItem();    public boolean isDone();    public Object first();}
package com.vapy.behavior.Iterator;import java.util.Vector;/** *  * @author vapy 2016年8月27日 *  */public class ConcreteIterator implements Iterator {    private int cursor = -1;    private Vector<Object> vector = null;    public ConcreteIterator(final Vector<Object> vector){        this.vector = vector;    }    @Override    public Object first() {        return vector.get(0);    }    @Override    public Object next() {        cursor ++;        return vector.get(cursor);    }    @Override    public Object currentItem() {        return vector.get(cursor);    }    @Override    public boolean isDone() {        if(cursor >= this.vector.size() - 1){            return true;        } else {            return false;        }    }}
package com.vapy.behavior.Iterator;/** *  * @author vapy 2016年8月27日 *  */public class Client {    public static void main(String[] args) {        final Aggregat agg = new ConcreteAggregat();        agg.add("abc");        agg.add("def");        final Iterator iterator = agg.createIterator();        System.out.println(iterator.first());        while(!iterator.isDone()){            System.out.println(iterator.next());        }    }}

IteratorResult
本文代码可在github查看:点击此处

4 0
原创粉丝点击