使用频率:★★★★★

一、什么是迭代器模式

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

二、补充说明

单一职责原则,分离了集合对象的遍历行为,抽象出一个迭代器类来负责;

三、角色

迭代器接口

迭代器具体实现

抽象容器

具体容器

四、例子,JAVA实现

例子说明:使用迭代器遍历容器

迭代器接口

package com.pichen.dp.behavioralpattern.iterator;public interface Iterator {public Object first();public Object previous();public Object next();public boolean hasNext();}

迭代器具体实现

package com.pichen.dp.behavioralpattern.iterator;import java.util.List;public class MyIterator implements Iterator{private List<Object> list;private int index = 0;public MyIterator(List<Object> list) {this.list = list;}@Overridepublic Object previous() {if((this.index - 1) < 0){return null;}else{return this.list.get(--index);}}@Overridepublic Object next() {if((this.index + 1) >= this.list.size()){return null;}else{return this.list.get(++index);}}@Overridepublic boolean hasNext() {if(this.index < (this.list.size() - 1)){return true;}return false;}/*** 〈一句话功能简述〉* 〈功能详细描述〉* @see com.pichen.dp.behavioralpattern.iterator.Iterator#first()* @return*/@Overridepublic Object first() {if(this.list.size() <= 0){return null;}else{return this.list.get(0);}}}

抽象容器

package com.pichen.dp.behavioralpattern.iterator;public abstract class Container {public abstract Iterator iterator();public abstract void put(Object obj);
}

具体容器

package com.pichen.dp.behavioralpattern.iterator;import java.util.ArrayList;
import java.util.List;public class MyContainer extends Container{private List<Object> list;public MyContainer() {this.list = new ArrayList<Object>();}@Overridepublic void put(Object obj){this.list.add(obj);}@Overridepublic Iterator iterator() {return new MyIterator(list);}}

客户端调用示例

package com.pichen.dp.behavioralpattern.iterator;public class Main {public static void main(String[] args) {//创建一个自定义容器,直接使用ArrayList的实现,仅仅示例作用Container strContainer = new MyContainer();strContainer.put("001");strContainer.put("002");strContainer.put("003");Iterator myIterator = strContainer.iterator();//使用举例System.out.println("------------------next、hasNext示例------------------");System.out.println(myIterator.first());System.out.println(myIterator.next());System.out.println(myIterator.hasNext());System.out.println(myIterator.next());System.out.println(myIterator.hasNext());System.out.println(myIterator.next());System.out.println(myIterator.hasNext());//使用举例System.out.println("------------------previous、hasNext示例------------------");System.out.println(myIterator.previous());System.out.println(myIterator.previous());System.out.println(myIterator.previous());System.out.println(myIterator.hasNext());//使用迭代器遍历System.out.println("------------------迭代器遍历示例------------------");System.out.println(myIterator.first());while(myIterator.hasNext()){System.out.println(myIterator.next());}}
}

结果打印

------------------next、hasNext示例------------------
001
002
true
003
false
null
false
------------------previous、hasNext示例------------------
002
001
null
true
------------------迭代器遍历示例------------------
001
002
003

转载于:https://www.cnblogs.com/chenpi/p/5213716.html

【设计模式】迭代器模式相关推荐

  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. 23种设计模式-迭代器模式《三国名将》

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

  6. [Head First设计模式]生活中学设计模式——迭代器模式

    系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式- ...

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

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

  8. C++设计模式-迭代器模式

    目录 基本概念 代码与实例 基本概念 迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 当你需要一个聚集对象,而且不管这些对象,而不管这些对象是 ...

  9. 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手

    一.你在开发中使用过迭代吗?      当你在使用JavaScript开发客户端应用的时候使用过for...in吗?  1<script type="text/javascript&q ...

  10. JAVA 设计模式 迭代器模式

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

最新文章

  1. 浅谈 nagios监控配置
  2. Thrift Direct Memory OOM问题解决方法 内存溢出问题
  3. 求求你别在用IF ELSE校验参数了
  4. java上传+限制单文件,VereMVC 之 单文件上传
  5. 【Linux】一步一步学Linux——Linux文件属性详解(28)
  6. python列表常用方法_python之 列表常用方法
  7. [收藏] Opera鼠标手势命令
  8. 深入理解 Vue Computed 计算属性
  9. layui添加复选框_对layui初始化列表的CheckBox属性详解,初始化属性
  10. this,super关键字的使用
  11. 如何对网页的加载进行性能优化
  12. 微信头像测试软件,心理测试:四个微信头像选一个,测试你的真实性格?
  13. pyquery库之爬取豆瓣读书
  14. SELECT command denied to user ''@'%' for column 'xxx_id' in table 'users_xxx' 权限问题
  15. 条形码在android上的代码,使条码生成器在android
  16. 苹果手机怎么创建php,怎么在苹果官网注册Apple ID?在网页上创建Apple ID教程
  17. 面试经历(某大型机器人少儿编程培训机构)
  18. Overture教程之五线谱介绍
  19. SparkSteaming实时接收网络端口数据和hdfs做Wordcount
  20. 以太坊数据上链和展示智能合约

热门文章

  1. C#反编译工具Reflector.exe教程
  2. Excel(XLS,XLSX)和CSV相互转换 - C#简单实现方案
  3. php mysql sql model_PHP数据库模型
  4. ELK logstash基本配置
  5. Xcode设置编译链接-framework CoreFoundation
  6. RSA加密:javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes
  7. JS不能向WASM传递数组?
  8. ADB Interface显示黄色惊叹号怎么办?
  9. 编译imsdroid,折腾了半天,还是弃用了Android Studio,换用Eclipse
  10. LINUX FFMPEG编译汇总(中等,只编译必要的部分)