15 行为模式 - 迭代子(Iterator)模式

1.用意

迭代子模式又叫游标模式,可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象。

 

2.类图

白箱聚集与外禀迭代子

黑箱聚集与内禀迭代子


 

3.代码

白箱聚集与外禀迭代子

/*
 * 抽象聚集角色
 */
public abstract class Aggregate {
	public Iterator createIterator() {
		return null;
	}
}


/*
 * 具体聚集角色
 */
public class ConcreteAggregate extends Aggregate {
	private Object[] objs = { "Monk Tang", "Monkey", "Pigsy", "Sandy", "Horse" };

	public Iterator createIterator() {
		return new ConcreteIterator(this);
	}

	public Object getElement(int index) {
		if (index < objs.length) {
			return objs[index];
		} else {
			return null;
		}
	}

	public int size() {
		return objs.length;
	}
}


/*
 * 抽象迭代子角色
 */
public interface Iterator {
	void first();

	void next();

	boolean isDone();

	Object currentItem();
}


/*
 * 具体迭代子角色
 */
public class ConcreteIterator implements Iterator {
	private ConcreteAggregate agg;
	private int index = 0;
	private int size = 0;

	public ConcreteIterator(ConcreteAggregate agg) {
		this.agg = agg;
		size = agg.size();
		index = 0;
	}

	/*
	 * 移动到第一个元素
	 * @see com.javapatterns.iterator.whitebox.Iterator#first()
	 */
	public void first() {
		index = 0;
	}

	/*
	 * 移动到下一个元素
	 * @see com.javapatterns.iterator.whitebox.Iterator#next()
	 */
	public void next() {
		if (index < size) {
			index++;
		}
	}

	/*
	 * 是否是第一个元素
	 * @see com.javapatterns.iterator.whitebox.Iterator#isDone()
	 */
	public boolean isDone() {
		return (index >= size);
	}

	/*
	 * 返还当前元素
	 * @see com.javapatterns.iterator.whitebox.Iterator#currentItem()
	 */
	public Object currentItem() {
		return agg.getElement(index);
	}
}


/*
 * 测试类
 */
public class Test {

	public static void main(String[] args) {
		ConcreteAggregate agg = new ConcreteAggregate();
		Iterator ite = agg.createIterator();
		for (int i = 0; i < agg.size(); i++) {
			S.s(ite.currentItem());
			ite.next();
		}
	}
}

 输出:


 

 

黑箱聚集与内禀迭代子

/*
 * 抽象聚集角色
 */
public abstract class Aggregate {
	public abstract Iterator createIterator();
}


/*
 * 具体聚集角色
 */
public class ConcreteAggregate extends Aggregate {
	private Object[] objs = { "Monk Tang", "Monkey", "Pigsy", "Sandy", "Horse" };

	public Iterator createIterator() {
		return new ConcreteIterator();
	}

	/*
	 * 具体迭代子角色
	 */
	private class ConcreteIterator implements Iterator {
	
		private int currentIndex = 0;

		/*
		 * 移动到第一个元素
		 * @see com.javapatterns.iterator.whitebox.Iterator#first()
		 */
		public void first() {
			currentIndex = 0;
		}

		/*
		 * 移动到下一个元素
		 * @see com.javapatterns.iterator.whitebox.Iterator#next()
		 */
		public void next() {
			if (currentIndex < objs.length) {
				currentIndex++;
			}
		}

		/*
		 * 是否是最后一个元素
		 * @see com.javapatterns.iterator.whitebox.Iterator#isDone()
		 */
		public boolean isDone() {
			return (currentIndex == objs.length);
		}

		/*
		 * 返还当前元素
		 * @see com.javapatterns.iterator.whitebox.Iterator#currentItem()
		 */
		public Object currentItem() {
			return objs[currentIndex];
		}
	}
}


/*
 * 抽象迭代子角色
 */
public interface Iterator {
	void first();

	void next();

	boolean isDone();

	Object currentItem();
}



/*
 * 测试类
 */
public class Test {
	private Iterator it;
	private Aggregate agg = new ConcreteAggregate();

	public void operation() {
		it = agg.createIterator();
		while (!it.isDone()) {
			S.s(it.currentItem().toString());
			it.next();
		}
	}

	public static void main(String[] args) {
		Test test = new Test();
		test.operation();
	}
}
 

 

 

z

海康DS-7604N-K1/RTB固件包 【摘要】海康DS-7604N-K1/RTB萤石云设备发布V4.30.091版本升级程序(2022.09.19),仅适用于指定型号。升级前需先升级至V3.4.106基础版本,刷机会重置设备为未激活状态,需重新设置admin密码。该机型支持密码/手势登录,无密码时可通过U盘升级。注意事项:升级存在风险,需确认程序适用性;升级过程严禁断电;必须阅读压缩包内的刷机说明。此为定制机型,非必要不建议升级。(150字) 阅读详情

相关推荐

AFSim 2.9实战指南:从入门到精通的中文教程

本文是AFSim 2.9的实战指南,提供从零开始的中文教程。内容涵盖仿真环境搭建、实体行为控制、脚本编写,到传感器、武器系统集成与复杂想定构建,最后讲解数据记录与结果分析方法,帮助用户快速掌握这一强大的军事仿真框架。

weixin_29281941的博客 948

设计模式(9)---->迭代器模式

迭代器 一、 引言 迭代这个名词对于熟悉Java的人来说绝对不陌生。我们常常使用JDK提供的迭代接口进行java Collection的遍历: List&lt;String&gt; list = new ArrayList&lt;String&gt;(); list.add("abc"); list.add("xyz"); for (Iterator&lt;String&...

weixin_34280237的博客 147

【hadoop编译报错】(yarn install) on project hadoop-yarn-applications-catalog-webapp Failed to run task

ambari+bigtop自定义组件集成

TTBIGDATA的博客 1804

迭代器 java_Java描述设计模式(13):迭代器模式

一、迭代器模式1、基础概念迭代器模式又叫游标模式,是对象的行为模式。迭代器模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象。2、模式图解3、核心角色Iterator:迭代器角色此抽象角色定义出遍历元素所需的接口。ConcreteIterator:具体迭代器角色此角色实现了Iterator接口,并保持迭代过程中的游标位置。Aggregate:聚集角色此抽象角色给出创建迭代器(Iterato...

weixin_39633891的博客 144

Windows10 搭建 FTP 服务器

问题: 有这么一个需求,博主需要对班级同学的信息进行收集,同学的信息是一个个的文件, 正常是每个同学将自己的信息打包压缩通过 QQ 或者邮箱方式发送给博主, 博主一个个接收这些压缩包,然后进行解压,再统一放到一个文件夹下, 但是博主觉得这样子实在是太麻烦了,如果某一个同学的信息来回变动,就需要接收很多次,更改很多次, 另外如果消息过多还会产生漏掉某个同学的信息的问题。 解决方法: 如果可以使...

assiduous_me的博客 3968

从“跳变”到“连续”:深入理解霍尔传感器插值与PLL角度估算的优劣与选择

本文深入解析霍尔传感器角度估算技术,对比线性插值法和锁相环(PLL)跟踪法的优劣,为电机控制领域的工程师提供实用指南。通过STM32F407和CubeMX的实例,详细探讨两种方法的实现细节、性能对比及优化策略,帮助在不同应用场景下做出最优选择。

weixin_30855761的博客 564

Android开发-设计模式-迭代器模式(Iterator)

迭代器模式又叫游标模式(Cursor),是对象的行为模式。迭代器模式可以顺序地访问一个聚集中的元素而不必暴露聚集内部的表象。

City_Coder的博客 603

保姆级教程:在Windows上用Python+OpenCV调用海康工业相机(附MVS配置避坑指南)

本文提供了一份详细的Windows环境下使用Python和OpenCV调用海康工业相机的保姆级教程,涵盖MVS配置避坑、相机连接、图像获取与格式转换等关键步骤。特别针对工业相机取流中的常见问题,如独占访问控制和多相机协同工作,提供了实用解决方案,帮助开发者快速实现稳定的图像采集系统。

weixin_29228781的博客 401

管理好聚集——迭代子(Iterator)模式

迭代子模式为遍历聚集提供了统一的接口方法,从而使得客户端不需要知道聚集的内部结构就能就能对聚集进行遍历等操作。迭代子模式的结构:一般结构:  涉及到的角色解释:抽象迭代子(Iterator)角色:定义了遍历聚集的接口。具体迭代子(ListIterator)角色:实现了抽象迭代子接口。抽象聚集(Collection)角色:定义聚集的公共方法,并为聚集

小武的专栏 1035

TLF35584 窗口看门狗_理论篇

1)看门狗的结果(有效或无效触发)由相关的看门狗故障计数器独立监控。2)窗口看门狗的状态是WWO,它可能有“有效WWD触发”或“无效WWD触发”值。

舊梦的博客 2527

使用geneHapR进行基因单倍型分析(以vcf文件为例)

如下图所示,可以看到,用户需要准备的包括:基因型文件、注释文件和样本信息文件,以及后续会用的表型文件。输出的主要内容有:变异位点的可视化、单倍型网络、地理分布、表型比较和连锁不平衡热图。geneHapR的工作流程。

沉香best的博客 5941

《JAVA与模式》26天系列—第19天—迭代子模式

迭代子模式又叫游标(Cursor)模式,是对象的行为模式。迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(internal representation)。 聚集和JAVA聚集   多个对象聚在一起形成的总体称之为聚集(Aggregate),聚集对象是能够包容一组对象的容器对象。聚集依赖于聚集结构的抽象化,具有复杂化和多样性。数组就是最基本的聚集,也是其他的JAVA聚

5064

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

16、迭代子模式(Iterator)

16、迭代子模式(Iterator) 顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。我们看下关系图:  这个思路和我们常用的一模一样,MyCollection中定义了集合的一些操作,MyIterator中定义了一系列迭代操作,

普羅●米修斯 ——— HelloWorld 244

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java 之 23 种设计模式解析——16、迭代子模式(Iterator)

16、迭代子模式(Iterator) 顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。我们看下关系图:   这个思路和我们常用的一模一样,MyCollection中定义了集合的一些操作,MyIterator中定义了一系列迭代操...

毕富国的博客 445

iterator - 对象行为型模式

迭代模式:提供一种顺序访问存储结构过程的模式。 实现过程:一个接口类:Iterator,提供hasNext()和next()方法接口;                 提供一个实现Iterator接口的迭代子类;                 需实现顺序访问的类,提供一个生成迭代子类的方法Iterator(),在这个方法里面创建一个对应的迭代子类并将数据传递过去。 代码: public...

kingSolider的博客 503

深入浅出设计模式(15)——Iterator模式

首先来看看概念: Iterator模式可以顺序的访问一个聚集中的元素而不必暴露聚集的内部表象。 优点: 1 简化了聚集的节目。迭代子具备了遍历的接口,这样聚集的接口就不必具备遍历接口 2 每一个聚集对象都可以有一个或者跟多的迭代子对象,每一格迭代子的迭代状态可以使彼此独 立的(外禀迭代子)。 3 由于遍历算法被封装到迭代子对象中,因此迭代算法可以独立于聚集对象变化。客户端不必知 道聚

Secret Island 629

Java的迭代器与迭代子模式

概括Java集合容器是Java的一个重要组成部分,而迭代器(Iterator)就是对外提供访问集合元素的一种方式。访问数组元素的方式访问数组的方式并不陌生,如下public class Test { public static void main(String[] args) { int[] arr = {2, 0, 1, 8, 0, 6, 0, 7}; ...

YotWei 820

二十三种设计模式16 迭代子模式(Iterator)

顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。我们看下关系图: 这个思路和我们常用的一模一样,MyCollection中定义了集合的一些操作,MyIterator中定义了一系列迭代操作,且持有Collection实例,我们来看看...

servepeople的博客 168

迭代子模式(Iterator)

http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html 顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。我们看下关系图: 这个思路和我们常用的一...

weixin_30649641的博客 76

【设计模式】—— 迭代模式Iterator

【设计模式】—— 迭代模式Iterator   前言:【模式总览】——————————by xingoo   模式意图   提供一个方法按顺序遍历一个集合内的元素,而又不需要暴露该对象的内部表示。   应用场景   1 访问一个聚合的对象,而不需要暴露对象的内部表示   2 支持对聚合对象的多种遍历   3 对遍历不同的对象,提供统一的...

xingoo 216

23种设计模式的性感见解(二)

14、COMMAND—俺有一个MM家里管得特别严,没法见面,只好借助于她弟弟在我们俩之间传送信息,她对我有什么指示,就写一张纸条让她弟弟带给我。这不,她弟弟又传送过来一个COMMAND,为了感谢他,我请他吃了碗杂酱面,哪知道他说:“我同时给我姐姐三个男朋友送COMMAND,就数你最小气,才请我吃面。”,:-( 命令模式:命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责...

夜空中最亮的星 176

13--迭代子模式

观察者模式:http://pan.baidu.com/s/1bA6mL4 参考网址:http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html 1.创建Collection集合,里面放置要迭代的元素:Iterator(目的:让Iterator成为Collection的一个属性) 2...

weixin_42288943的博客 79

C++ Java 23种设计模式的uml图表示及通俗介绍

创建型模式 1、FACTORY 2、BUILDER 3、FACTORY METHOD 4、PROTOTYPE 5、SINGLETON 结构型模式 6、ADAPTER 7、BRIDGE8、COMPOSITE 9、DECORATOR10、FACADE 11、FLYWEIGHT 12、PROXY 行为模式 13、CHAIN OF RESPONSIBLEITY 14、...

BlueBirdssh的专栏 732

Java常用设计模式

Java常用设计模式 目录 设计模式 1 创建模式 2 设计模式之Factory -工厂模式 2 设计模式之FACTORY METHOD -工厂方法模式 2 设计模式之Builder  -建造模式 4 设计模式之PROTOTYPE -原始模型模式 5 设计模式之Singleton -单例模式 6 结构模式 7 设计模式之Ada

wtxczwtxcz的专栏 740
上一篇: google analycisc
下一篇: 16 行为模式 - 责任链(Chain of Responsibility)模式
O2AtomLife
博客等级 码龄19年 2粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值