博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
迭代器模式
阅读量:7202 次
发布时间:2019-06-29

本文共 1376 字,大约阅读时间需要 4 分钟。

1、模式定义

迭代器模式(Iterator Pattern) :提供一种方法来訪问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。

2、模式结构

迭代器模式包括例如以下角色:
Iterator: 抽象迭代器
ConcreteIterator: 详细迭代器
Aggregate: 抽象聚合类
ConcreteAggregate: 详细聚合类

3、模式分析

聚合是一个管理和组织数据对象的数据结构。
聚合对象主要拥有两个职责:一是存储内部数据。二是遍历内部数据。 
存储数据是聚合对象最主要的职责。
将遍历聚合对象中数据的行为提取出来。封装到一个迭代器中。通过专门的迭代器来遍历聚合对象的内部数据,这就是迭代器模式的本质。

迭代器模式是“单一职责原则”的完美体现。 

模式分析

自己定义迭代器
MyIterator——抽象迭代器
MyCollection——抽象聚合类
NewCollection——详细聚合类
NewIterator——详细迭代器
Client 

public class ConcreteIterator implements Iterator{	private ConcreteAggregate objects;		public ConcreteIterator(ConcreteAggregate objects)	{		this.objects=objects;	}	public void first()	{  ......  }			public void next()	{  ......  }	public boolean hasNext()	{  ......  }		public Object currentItem()	{  ......  }}public class ConcreteAggregate implements Aggregate{	    ......		public Iterator createIterator()	{		return new ConcreteIterator(this);	}	......}
在迭代器模式中应用了工厂方法模式。聚合类充当工厂类。而迭代器充当产品类,因为定义了抽象层。系统的扩展性非常好,在client能够针对抽象聚合类和抽象迭代器进行编程。
因为非常多编程语言的类库都已经实现了迭代器模式,因此在实际使用中我们非常少自己定义迭代器。仅仅须要直接使用Java、C#等语言中已定义好的迭代器就可以,迭代器已经成为我们操作聚合对象的基本工具之中的一个。

4、模式优缺点

迭代器模式的长处
它支持以不同的方式遍历一个聚合对象。

迭代器简化了聚合类。

在同一个聚合上能够有多个遍历。
在迭代器模式中,添加新的聚合类和迭代器类都非常方便,无须改动原有代码,满足“开闭原则”的要求。

迭代器模式的缺点

因为迭代器模式将存储数据和遍历数据的职责分离,添加新的聚合类须要相应添加新的迭代器类,类的个数成对添加,这在一定程度上添加了系统的复杂性。

5、模式适用环境

在下面情况下能够使用迭代器模式:
訪问一个聚合对象的内容而无须暴露它的内部表示。
须要为聚合对象提供多种遍历方式。
为遍历不同的聚合结构提供一个统一的接口。

转载地址:http://kuzum.baihongyu.com/

你可能感兴趣的文章
布隆过滤器
查看>>
cocos2dx的对象的内存释放
查看>>
模板特化疑问
查看>>
李京:中国科技大学移动平台——掌上科大
查看>>
<转>Windows下用xcode开发swift程序的图文教程 <一>
查看>>
PMCalendar
查看>>
【收藏】Aspose.Pdf应用教程
查看>>
PHP使用星号隐藏用户名,手机,邮箱的实现方法
查看>>
C++ 指针—01 指针与数组的对比
查看>>
推荐6款常用的Java开源报表制作工具
查看>>
CentOS mini安装环境下安装私有YUM服务器
查看>>
mysql case when 多参数条件语法
查看>>
iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
查看>>
实现JSON在线美化(格式化)、JSON转CSV、CSV转XML工具-toolfk程序员工具网
查看>>
Combine Two Tables[leetcode]
查看>>
Linux环境变量
查看>>
Python2 进程扫描脚本
查看>>
JQuery EasyUI 日期控件如何控制日期选择区间
查看>>
scrapy ImportError: No module named items
查看>>
jboss7.1.1配置jndi
查看>>