用途


迭代器模式 (Iterator)
提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示
迭代器模式是一种行为型模式

结构


图-迭代器模式结构图

Iterator : 定义访问元素的接口。
interface Iterator {
    public Object first();
    public Object next();
    public boolean isDone();
    public Object currentItem();
}

ConcreteIterator : 实现 Iterator 接口。记录当前访问的元素在集合中的位置信息。

class ConcreteIterator implements Iterator {
    private int current = 0;
    private ConcreteAggregate aggregate;
    
    public ConcreteIterator(ConcreteAggregate aggregate) {
        this.aggregate = aggregate;
    }

@Override
    public Object first() {
        return aggregate.get(0);
    }

@Override
    public Object next() {
        current++;
        if (current < aggregate.size()) {
            return aggregate.get(current);
        }
        return null;
    }

@Override
    public boolean isDone() {
        return (current >= aggregate.size()) ? true : false;
    }

@Override
    public Object currentItem() {
        return aggregate.get(current);
    }
}

Aggregate : 定义创建 Iterator 对象的接口。

interface Aggregate {
    public Iterator CreateIterator();
}

ConcreteAggregate : 实现 Iterator 接口,返回一个合适的 ConcreteIterator 实例。

class ConcreteAggregate implements Aggregate {
    private List<Object> items = new ArrayList<Object>();
    
    @Override
    public Iterator CreateIterator() {
        return new ConcreteIterator(this);
    }
    
    public int size() {
        return items.size();
    }
    
    public Object get(int index) {
        return items.get(index);
    }
    
    public void set(int index, Object element) {
        items.set(index, element);
    }
    
    public void add(Object element) {
        items.add(element);
    }
}

测试代码

public class IteratorPattern {
    public static void main(String[] args) {
        ConcreteAggregate aggregate = new ConcreteAggregate();
        aggregate.add("张三");
        aggregate.add("李四");
        aggregate.add("王五");
        aggregate.add("赵六");
        
        Iterator iter = new ConcreteIterator(aggregate);
        Object item = iter.first();
        System.out.println("第一个人是:" + item);
        System.out.println("所有人的名单是:");
        while (!iter.isDone()) {
            System.out.println(iter.currentItem());
            iter.next();
        }
    }
}

运行结果

第一个人是:张三
所有人的名单是:
张三
李四
王五
赵六
应用场景


访问一个聚合对象的内容而无需暴露它的内部表示。
支持对聚合对象的多种遍历。
为遍历不同的聚合结构提供一个统一的接口。
推荐

本文属于 JAVA设计模式系列

参考资料

《大话设计模式》

《HeadFirst设计模式》

JAVA 设计模式 迭代器模式相关推荐

  1. java设计模式迭代器模式_迭代器设计模式示例

    java设计模式迭代器模式 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式 ...

  2. java设计模式迭代器模式_Java中的迭代器设计模式–示例教程

    java设计模式迭代器模式 迭代器模式是一种行为模式,它用于提供遍历一组对象的标准方式. Iterator模式在Java Collection Framework中得到了广泛使用,其中Iterator ...

  3. java设计模式迭代器模式_迭代器模式和Java

    java设计模式迭代器模式 大家好,在本文中,我们将检查Iterator Pattern . 我知道你们中许多人已经使用过一种设计模式,但是也许您没有意识到它是模式,或者不知道它的巨大价值. 根据&l ...

  4. java设计模式迭代器模式_Java中的迭代器设计模式

    java设计模式迭代器模式 Iterator design pattern in one of the behavioral pattern. Iterator pattern is used to ...

  5. Java设计模式——迭代器模式

    概述 网上大部分人说迭代模式的时候,总是以某一种可遍历的对象为例进行介绍.这是可行的,这也是迭代模式的基本原型.当我看到<Head Frist设计模式>中迭代模式的时候,感觉要是能从另一个 ...

  6. java设计模式---迭代器模式

    定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节. 类型:行为类模式 类图:        如果要问java中使用最多的一种模式,答案不是单例模式,也不是工厂模式,更不是策略模 ...

  7. 23种设计模式-迭代器模式《三国名将》

    对于许久不用的东西,容易忘记.百度许久,也未能找到自己所要. 从今日起,有些东西就记载下来,不仅方便自己,希望能帮到他人吧! 定义 提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部 ...

  8. Java 设计模式——状态模式

    概述 很多人在说状态模式的时候总拿策略模式来进行对比,可能他们的类图会有一点类似,可我却不认为他们有多么相像.你可以阅读<Java设计模式--策略模式>这篇博客,并与本文对比,以找到蛛丝马 ...

  9. Java设计模式——Builder模式

    前言 之前写Android程序的时候,经常会用到Dialog(对话框)这个控件.我们在使用Dialog,比如AlertDialog的时候就用到了这里要说明的Builder模式.现在我们来看一下这样的一 ...

最新文章

  1. javascript 计算器、动态时钟、表格复选框全选(扩展)、轮播图、36选7、随机数...
  2. CentOS 7下载
  3. linux一路填坑...
  4. 【精品计划 附录2】- 算法分析
  5. html中给div设置的属性怎么样才能拿得到_前端基础高频面试题(更新中)
  6. Java记录 -9- 面向对象之封装
  7. 使用Epoch-Based Reclamation(EBR,特定域回收的一种方法)修改 lazy-list
  8. 小程序如何添加外部字体库
  9. 关于c语言中%g(G)的用法和精度问题
  10. 为满足不同交通参与者需求,德国在道路分级及限速管理上有“高招”!
  11. word文字铺满页面_word如何把行铺满页面 怎样使word文档铺满页面
  12. 【STM32】关于DMA控制器的介绍和使用
  13. window10系统ie设置代理,保存不了的问题
  14. 什么pdf转换成word转换器在线好
  15. 多校区网络直播系统解决方案
  16. 誉天双11直播盛典,爆款课程打骨折!
  17. 面试的时候,如何自我介绍?
  18. 理想点法matlab p趋向无穷大,Matlab讨论区 - 声振论坛 - 振动,动力学,声学,信号处理,故障诊断 - Powered by Discuz!...
  19. Python开发环境Spyder3安装方法
  20. java项目中数据字典的实现

热门文章

  1. 从2个命令简单聊聊CentOS账户锁定原理
  2. Entity Framework 并发处理
  3. sqlserver监控(备忘)
  4. 史上最简单安装摄像头的方法
  5. 全国人民强烈反对手机单项收费!
  6. Atlas与面向对象的Javascript
  7. 视频信息查看,帧信息查看
  8. 2016年美国太阳能光伏发电成本持续下降
  9. 根据id来实现小程序tab切换,
  10. Codeforces 509C Sums of Digits