初识设计模式 - 迭代器模式

优质资源分享

学习路线指引(点击解锁) 知识定位 人群定位
Python实战微信订餐小程序 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
Python量化交易实战 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

简介

迭代器设计模式(Iterator Design Pattern),也叫作游标设计模式(Cursor Design Pattern)。

迭代器模式将集合对象的遍历操作从集合类中拆分出来,放到迭代器类中,让两者的职责更加单一。

其定义是,提供一种方法来访问聚合对象,而不暴露这个对象的内部实现。

典型实现

首先,定义一个用于遍历聚合对象中所存储元素的抽象迭代器接口,其代码示例如下:



|  | public interface Iterator { |
|  | // 将游标指向第一个元素 |
|  | public void first(); |
|  | // 将游标指向下一个元素 |
|  | public void next(); |
|  | // 判断是否存在下一个元素 |
|  | public boolean hasNext(); |
|  | // 获取游标指向的当前元素 |
|  | public Object currentItem(); |
|  | } |


然后,我们通常将存储数据的类称作为聚合类,一般会在聚合类中创建迭代器对象,如下是抽象聚合接口的代码示例:



|  | public interface Aggregate { |
|  | public Iterator creteIterator(); |
|  | } |


在具体迭代器类中,我们需要注入聚合对象,以便后续使用迭代器时能访问到其数据,其代码示例如下:



|  | public class ConcreteIterator implements Iterator { |
|  | private Aggregate objects; |
|  | private Object cursor; |
|  |  |
|  | public ConcreteIterator(Aggregate objects) { |
|  | this.objects = objects; |
|  |  } |
|  |  |
|  | // 将游标指向第一个元素 |
|  | public void first() {} |
|  | // 将游标指向下一个元素 |
|  | public void next() {} |
|  | // 判断是否存在下一个元素 |
|  | public boolean hasNext() {} |
|  | // 获取游标指向的当前元素 |
|  | public Object currentItem() {} |
|  | } |


在具体聚合类中,通常是实现存储数据的逻辑,以及指定具体迭代器的对象,其代码示例如下:



|  | public class ConcreteAggregate implements Aggregate { |
|  | public Iterator creteIterator() { |
|  | return new ConcreteIterator(this); |
|  |  } |
|  | } |


总结

优点

迭代器模式的主要优点如下:

  • 封装性良好,访问一个聚合对象的内容而无需暴露它的内部实现
  • 将遍历操作交给迭代器,简化了复杂聚合类的设计
  • 支持以不同的方式遍历聚合对象,在同一个聚合对象上可以定义多种遍历方式
  • 增加新的聚合类和迭代器类都很方便,满足开闭原则

缺点

迭代器模式的主要缺点如下:

  • 迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加
  • 抽象迭代器的设计难度较大,需要充分考虑系统将来的扩展

适用场景

迭代器模式的适用场景如下:

  • 访问一个聚合对象的内容而无需暴露它的内部实现
  • 需要为一个聚合对象提供多种遍历方式
  • 为遍历不同的聚合对象提供一个统一的接口

源码

在 Java 中,迭代器的应用非常广。

最顶层的 Collection 集合接口继承了 Iterable 接口,其实表明了所有的集合对象都是可迭代对象,并且都需要实现获取 Iterator 对象的方法。

将这个源码映射到典型实现中,Iterable 接口和 Collection 接口就是抽象聚合接口,Iterator 接口则是抽象迭代器接口。

你可能感兴趣的:(python,设计模式,迭代器模式,计算机)