迭代器模式

125 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情

本篇文章我们要介绍的是“迭代器模式”相关的概念和组成,以便帮助读者了解迭代器模式。

迭代器模式的概念

迭代器模式是行为型设计模式的一种。通过这个设计模式的名字我们大概就可以猜出这个设计模式的具体使用场景了,就是用来做遍历的。

但是我们可能会对这个设计模式心存疑问:遍历集合里的元素还需要设计模式吗?是不是有点多此一举?当然不是。这里我们可以假设我们使用了不同的方式实现了集合,比如:数组、自定义的集合、List 结构等等。

这个时候如而过我们想遍历这些集合,那就需要使用不同的方式,同时我们还必须要知道集合的内部结构,才能选择出对应的合适的遍历方式。开发者向来是比较“懒”的,我们此时不禁会想,这样做的话是不是比较繁琐呢?

因此,我们伟大的前辈就发明了“迭代器模式”,这个模式的设计思想是:提供一种遍历不同集合元素的统一接口,并且无需知晓该集合的内部结构就可以使用。

迭代器模式的组成角色

首先我们来看迭代器模式的类图:

image.png

  • 抽象迭代器(Iterator)角色:此抽象角色-为了定义-遍历元素-所需要用到的-接口,接口中有需要使用的方法。
  • 具体迭代器(ConcreteIterator)角色:此角色实现Iterator 接口,同时保持在迭代过程中的游标cursor 位置。
  • 容器/聚集(Aggregate)角色:此抽象角色的作用就是为了创建具体的迭代器(Iterator)对象。
  • 具体容器/聚集(ConcreteAggregate)角色:实现了创建迭代器(Iterator)对象的接口,返回一个合适的具体迭代器实例。同时也会使得具体迭代器角色与此具体容器相关联。
  • 客户端(Client)角色:持有对容器及其迭代器对象的引用,调用迭代子对象的迭代接口,也有可能通过迭代子对象操作聚集/容器中的元素(增加和删除)。

总结

其实目前迭代器已经在各个容器类中有比较完备的实现了,我们无需再为此做额外的开发。所以这里仅仅做一些概念上的介绍,所以对于迭代器模式也仅仅停留在了解上,而非应用。