美文网首页java设计模式笔记
设计模式十七--迭代器模式

设计模式十七--迭代器模式

作者: 朽木亦自雕 | 来源:发表于2019-03-30 15:30 被阅读0次

    定义

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

    迭代器模式的角色

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

    public interface Iterator{
      public Object next();
      public Object hasNext();
    }
    

    2:具体迭代器角色(ConcreteIterator)
    该角色实现迭代器接口,完成容器元素的遍历。

    public class ConcreateIterator implements Iterator{
      private ConcreateAggregate agg;
    
      private int index;
    
      private int size;
    
      public ConcreateIterator (ConcreateAggregate  agg){
        this.agg = agg;
        this.index = 0;
        this.size = agg.size;
      }
      //是否有下一个角色
      public boolean hasNext(){
        return index < size;
      }
      //获取下一个角色
      public Object next(){
        if(index < next){
          return agg.getElement(index++);
        }else{
          return null; 
        }
      }
    }
    

    3:抽象聚集(Aggregate)
    该角色提供创建迭代器角色的接口。

     public interface Aggregate{
        public void add(Obejct obj);
        public Iterator iterator();
     } 
    

    4:具体聚集(ConcreateAggregate)
    该角色实现抽象聚集接口,创建出胡容纳迭代器的对象。

    public class ConcreateAggregate implements Aggregate{
      public 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 iterator(){
        return new ConcreateIterator(this);
      }
    }
    

    客户端代码:

    public class Client{
      public static void main(String [] args){
        ConcreateAggregate  agg = new ConcreateAggregate();
        agg.add(1);
        agg.add(2);
        agg.add(3);
        Iterator iterator = agg.iterator();
        while(iterator.hasNext()){
          System.out.println(iterator.next());
        }
      }
    }
    

    优点

    1:迭代器简化了访问容器元素的操作,具备一个统一访问的接口。
    2:封装遍历算法,使算法独立于聚集角色,即是聚集对象类型变化,遍历算法也不会变化。

    缺点

    1:迭代器模式给使用者一种序列化的错觉,从而产生错误。
    2:迭代器的元素都是Object类型,jdk1.5以后才有了泛型的概念。

    使用场景

    java.util.Iterator接口,就是原生的迭代器,实现的集合类有 Collection、ArrayList、Vector、Stack、HashSet、EntrySet等

    目前迭代器模式因为jdk1.2以后有了java.util.Iterator,所以迭代器已经普遍应用于数组集合的遍历当中。

    参考资料:设计模式(java)

    相关文章

      网友评论

        本文标题:设计模式十七--迭代器模式

        本文链接:https://www.haomeiwen.com/subject/zozqlqtx.html