迭代器模式

迭代器模式

我们在日常的开发中,特别是在使用集合的过程中都或多或少使用了迭代器来对集合进行遍历。这时候我们就会思考一个问题,明明简单的For循环就能解决的集合遍历问题,我们非得创造一个迭代器来进行集合的遍历,使用迭代器来遍历到底有什么不一样的地方吗?本着‘存在即合理’的原则,我们通过手写迭代器的方式来深入了解一下迭代器模式的实现和带来的编码好处。

实现案例

有一个书架,我们想要知道这个书架里面堆了哪些书籍,这时候我们就需要对书架里面的书一本一本的遍历,直到没有书本,我们就能清楚的知道数据上堆满了哪些书籍。

  • 可以被遍历的标记(生成迭代器的接口)
    首先提供一个接口,来标明这个类是可以被遍历的集合。实现这个接口的类可以生成对应的迭代器。
public interface Aggregate{
    public abstract Iterator iterator();
}
  • 迭代器接口
    迭代器的抽象接口,定义了两个方法
    (1)是否还有下一个元素
    (2)返回下一个元素
public interface Iterator{
    public abstract boolean hasNext();
    public abstract Object next();
}
  • 集合存储的元素(书本)
public class book{
    private String name;
}
  • 迭代器实现类
public class BookShelfIterator{
    private BookShelf bookShelf;
    //指向当前遍历的位置
    private int index;
    ...
    public boolean hasNext(){
        //将当前的index与集合的大小做比较,小于集合大小,说明还有元素。
        if(index < bookShelf.length){
            return true;
        }else{
            return false;
        }
    }

    public Object next(){
        Book book = bookShelf.getBookAt(index);
        index++;
        return book;
    }
}
  • 书架类
    书架类用于存放书本,可以用来遍历,因此需要实现Aggregate接口
public class BookShelf implements Aggregate{
    ...
    public Iterator iterator(){
        //生成对应的迭代器
        return new BookShelfIterator();
    }
}
  • 测试方法
Iterator it = bookShelf.iterator();
while(it.hasNext){
    Book book = (Book)it.next();
}

由此,我们就自定义实现了一个迭代器,可以满足集合遍历的基本需求

迭代器模式的几点思考

为什么要使用迭代模式

遍历与实现分开,无论BookShelf是怎样的实现,只要能够获取到对应的迭代器,遍历方式都是不会变的,利于代码的扩展。

Iterator it = bookShelf.iterator();
while(it.hasNext){
    Book book = (Book)it.next();
}

多种迭代器

迭代器实现了遍历集合的方式,那么我们可以设计多种不一样的迭代器。

  • 从后向前遍历
  • 跳跃性遍历
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 迭代器模式定义 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内...
    Doooook阅读 1,841评论 0 0
  • 迭代器模式定义迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部...
    丶_62f3阅读 1,198评论 2 2
  • 迭代器模式定义 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内...
    嘟嘟碰碰叮叮当当阅读 19,477评论 2 9
  • 迭代器模式(Iterator)用于在数据集合中按照顺序遍历集合,在遍历的同时不需要暴露对象的内部表示,根据不同的需...
    Code4Android阅读 3,047评论 0 3
  • 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 迭代器模式让我们能游走于聚合内的...
    jiahzhon阅读 1,315评论 0 0

友情链接更多精彩内容