【设计模式】迭代器模式
使用频率:★★★★★
一、什么是迭代器模式
提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。
二、补充说明
单一职责原则,分离了集合对象的遍历行为,抽象出一个迭代器类来负责;
三、角色
迭代器接口
迭代器具体实现
抽象容器
具体容器
四、例子,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
【设计模式】迭代器模式相关推荐
- java设计模式迭代器模式_迭代器设计模式示例
java设计模式迭代器模式 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式 ...
- java设计模式迭代器模式_Java中的迭代器设计模式–示例教程
java设计模式迭代器模式 迭代器模式是一种行为模式,它用于提供遍历一组对象的标准方式. Iterator模式在Java Collection Framework中得到了广泛使用,其中Iterator ...
- java设计模式迭代器模式_迭代器模式和Java
java设计模式迭代器模式 大家好,在本文中,我们将检查Iterator Pattern . 我知道你们中许多人已经使用过一种设计模式,但是也许您没有意识到它是模式,或者不知道它的巨大价值. 根据&l ...
- java设计模式迭代器模式_Java中的迭代器设计模式
java设计模式迭代器模式 Iterator design pattern in one of the behavioral pattern. Iterator pattern is used to ...
- 23种设计模式-迭代器模式《三国名将》
对于许久不用的东西,容易忘记.百度许久,也未能找到自己所要. 从今日起,有些东西就记载下来,不仅方便自己,希望能帮到他人吧! 定义 提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部 ...
- [Head First设计模式]生活中学设计模式——迭代器模式
系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式- ...
- Java设计模式——迭代器模式
概述 网上大部分人说迭代模式的时候,总是以某一种可遍历的对象为例进行介绍.这是可行的,这也是迭代模式的基本原型.当我看到<Head Frist设计模式>中迭代模式的时候,感觉要是能从另一个 ...
- C++设计模式-迭代器模式
目录 基本概念 代码与实例 基本概念 迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 当你需要一个聚集对象,而且不管这些对象,而不管这些对象是 ...
- 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手
一.你在开发中使用过迭代吗? 当你在使用JavaScript开发客户端应用的时候使用过for...in吗? 1<script type="text/javascript&q ...
- JAVA 设计模式 迭代器模式
用途 迭代器模式 (Iterator) 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 迭代器模式是一种行为型模式. 结构 图-迭代器模式结构图 Iterator : 定义访 ...
最新文章
- 浅谈 nagios监控配置
- Thrift Direct Memory OOM问题解决方法 内存溢出问题
- 求求你别在用IF ELSE校验参数了
- java上传+限制单文件,VereMVC 之 单文件上传
- 【Linux】一步一步学Linux——Linux文件属性详解(28)
- python列表常用方法_python之 列表常用方法
- [收藏] Opera鼠标手势命令
- 深入理解 Vue Computed 计算属性
- layui添加复选框_对layui初始化列表的CheckBox属性详解,初始化属性
- this,super关键字的使用
- 如何对网页的加载进行性能优化
- 微信头像测试软件,心理测试:四个微信头像选一个,测试你的真实性格?
- pyquery库之爬取豆瓣读书
- SELECT command denied to user ''@'%' for column 'xxx_id' in table 'users_xxx' 权限问题
- 条形码在android上的代码,使条码生成器在android
- 苹果手机怎么创建php,怎么在苹果官网注册Apple ID?在网页上创建Apple ID教程
- 面试经历(某大型机器人少儿编程培训机构)
- Overture教程之五线谱介绍
- SparkSteaming实时接收网络端口数据和hdfs做Wordcount
- 以太坊数据上链和展示智能合约
热门文章
- C#反编译工具Reflector.exe教程
- Excel(XLS,XLSX)和CSV相互转换 - C#简单实现方案
- php mysql sql model_PHP数据库模型
- ELK logstash基本配置
- Xcode设置编译链接-framework CoreFoundation
- RSA加密:javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes
- JS不能向WASM传递数组?
- ADB Interface显示黄色惊叹号怎么办?
- 编译imsdroid,折腾了半天,还是弃用了Android Studio,换用Eclipse
- LINUX FFMPEG编译汇总(中等,只编译必要的部分)