Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >JAVA 设计模式 迭代器模式

JAVA 设计模式 迭代器模式

作者头像
静默虚空
发布于 2018-01-05 03:18:22
发布于 2018-01-05 03:18:22
8580
举报

用途

迭代器模式 (Iterator)

提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示

迭代器模式是一种行为型模式

结构

图-迭代器模式结构图

Iterator : 定义访问元素的接口。

代码语言:txt
AI代码解释
复制
 interface Iterator {
 public Object first();
 public Object next();
 public boolean isDone();
 public Object currentItem();
 } 

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

代码语言:txt
AI代码解释
复制
 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 对象的接口。

代码语言:txt
AI代码解释
复制
 interface Aggregate {
 public Iterator CreateIterator();
 } 

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

代码语言:txt
AI代码解释
复制
 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);
     }
 } 

测试代码

代码语言:txt
AI代码解释
复制
 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();
         }
     }
 } 

运行结果

代码语言:txt
AI代码解释
复制
第一个人是:张三
 所有人的名单是:
 张三
 李四
 王五
 赵六

应用场景

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

推荐

本文属于 JAVA设计模式系列

参考资料

《大话设计模式》《HeadFirst设计模式》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-01-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【地铁上的设计模式】--行为型模式:迭代器模式
迭代器模式是一种行为型设计模式,它提供了一种遍历聚合对象中各个元素的方法,而不需要暴露该聚合对象的内部表示。这个模式分离了聚合对象的遍历行为,使得遍历算法能够与聚合对象分离开来,从而可以在不改变聚合对象的情况下定义新的遍历操作。迭代器模式由迭代器接口、具体迭代器类、聚合接口和具体聚合类等组成,其中迭代器接口定义了访问和遍历元素的方法,而聚合接口定义了创建迭代器的方法。迭代器模式的实现可以大大简化遍历聚合对象中元素的代码,同时也可以方便地新增不同类型的迭代器,从而为聚合对象提供不同的遍历行为。
喵叔
2023/05/09
3700
设计模式--迭代器模式
迭代器模式是一种行为型设计模式,它允许客户端遍历一种容器(如列表或数组)中的元素,并访问容器中的每个元素,而无需关心容器的内部实现。迭代器模式属性于单一职责原则,因为它将遍历和容器分离开来。
软件架构师Michael
2023/07/19
2800
[设计模式]之九:迭代器模式
迭代器分离了集合对象的遍历行为,抽象出一个迭代器负责。这既可以不暴露内部结构,也让外部代码透明地访问集合内部数据
wOw
2018/09/18
2540
[设计模式]之九:迭代器模式
设计模式之迭代器模式
Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.
beginor
2020/08/10
3080
设计模式之迭代器模式
迭代器模式
一、简介 1、迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 2、类成员 (1)Iterator(迭代器)迭代器定义访问和遍历元素的接口 (2)ConcreteIterator (具体迭代器)具体迭代器实现迭代器接口对该聚合遍历时跟踪当前位置 (3)Aggregate (聚合)聚合定义创建相应迭代器对象的接口 (4)ConcreteAggregate (具体聚合)具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例 3、现在的高级
用户1215536
2018/02/05
5960
迭代器模式
Design Patterns 20 - 迭代器模式
迭代器模式, 提供一种方法顺序访问一个聚合对象中各个元素, 而又不暴露该对象的内部表示.
Reck Zhang
2021/08/11
1560
设计模式 | 迭代器模式及典型应用
迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。
小旋锋
2019/01/21
6120
Java描述设计模式(13):迭代器模式
一、迭代器模式 1、基础概念 迭代器模式又叫游标模式,是对象的行为模式。迭代器模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象。 2、模式图解 3、核心角色 Iterator:迭代器角色
知了一笑
2019/09/24
3920
Java描述设计模式(13):迭代器模式
迭代器模式[通俗易懂]
迭代器模式 ,提供一种方法顺序訪问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
全栈程序员站长
2022/07/10
2810
迭代器模式[通俗易懂]
迭代器模式
今天要说的迭代器模式,实际上就是Java已经为我们实现好了,那就是Java的Iterator类。包括很多编程语言也有自己的迭代器类,但同时它也是一个设计模式,所以在我们实现迭代器模式的时候实际上就是在实现一个迭代器类。 我们先来了解何为迭代器?其实你把它简单理解为for循环也没什么问题,可以说是它是for循环的高级形式。它提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。我们为它提供开始、下一个、是否结束等方法。 定义一个迭代器接口,包含以下方法。 1 package day_28_
用户1148394
2018/01/09
6250
迭代器模式(Iterator)
迭代器模式(Iterator) 迭代器模式(Iterator)[Cursor] 意图:提供一种方法顺序访问一个聚合对象中的每个元素,而又不想暴露该对象的内部表示。 应用:STL标准库迭代器实现、Jav
Florian
2018/02/05
5510
迭代器模式(Iterator)
PHP设计模式之迭代器模式
一说到这个模式,就不得不提循环语句。在《大话设计模式》中,作者说道这个模式现在的学习意义更大于实际意义,这是为什么呢?当然就是被foreach这货给整得。任何语言都有这种类似的语法可以方便快捷的对数组、对象进行遍历,从而让迭代器模式从高高在上的23大设计模式中的明星慢慢成为了路人。特别是我们这门PHP语言,PHP的强大之处就在于对于数组的灵活操作,本身就是hashmap的结构,自然会有各种方便的数组操作语法,而foreach也是我们最常用的语句,甚至比for还常用。
硬核项目经理
2019/08/23
5070
PHP设计模式之迭代器模式
Python设计模式(10):迭代器模式
在面向对象的软件设计中,如果一个系统有比较复杂的数据结构,客户程序往往没有必要详细地知道其内部的实现。为了使用方便,该系统应该提供给客户程序一种遍历方法。该遍历方法类似于使用电视机遥控器来浏览电视频道,客户程序只要按照顺序调用 next()方法即可得到相应的数据。本节介绍如何给复杂的聚合型数据结构提供一个遍历方法的设计模式——迭代器模式(Iterator Pattern)。
不可言诉的深渊
2019/07/26
7780
小谈设计模式(21)—迭代器模式
主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。
学编程的小程
2023/10/11
1740
小谈设计模式(21)—迭代器模式
设计模式实战-迭代器模式,最常用的设计模式之一
迭代器模式(Iterator Pattern)又称为游标(Cursor)模式,是最常被使用的几个模式之一,被广泛地应用到 Java 的 API 中。例如,Java 的集合(Collection)框架中,就广泛使用迭代器来遍历集合中的元素。
架构师修炼
2020/07/17
6270
设计模式之迭代器模式(行为型)
迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor),所以迭代器模式是一种对象行为型。
SmileNicky
2019/04/22
3510
迭代器模式 迭代器模式
提供一种顺序访问集合的元素而不暴露其底层表示的方法。 ——《设计模式:可复用面向对象软件的基础》
mingmingcome
2021/12/09
6720
迭代器模式
    





        迭代器模式
设计模式——迭代器模式
设计模式——迭代器模式
Java架构师必看
2021/05/14
3650
设计模式——迭代器模式
Java设计模式(十六)----迭代子模式
迭代子模式 一、 概述 二、 结构 1.白箱聚集与外禀迭代子 2.黑箱聚集与内禀迭代子 主动迭代子和被动迭代子 静态迭代子和动态迭代子 Fail Fast Fail Fast在JAVA聚集中的使用 迭代子模式的优点 一、概述 1.定义 迭代子模式又叫游标(Cursor)模式,是对象的行为模式。迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的
汤高
2018/01/11
7370
Java设计模式(十六)----迭代子模式
一起学设计模式 - 迭代器模式
迭代器模式听起来可能感觉很陌生,但是实际上, 迭代器模式是所有设计模式中最简单也是最常用的设计模式,正是因为太常用了,所以导致很多人忽略了它的存在。
battcn
2018/08/03
2990
一起学设计模式 - 迭代器模式
相关推荐
【地铁上的设计模式】--行为型模式:迭代器模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文