14 Iterator迭代器(行为模式)
14 Iterator(行为模式)
-
- 提供按顺序访问聚合对象的元素的方法,而不公开其底层表示形式。
- 也称为cursor
- 动机
- 聚合对象(如列表)应该提供一种访问其元素而不公开其内部结构的方法。
- 迭代器模式的关键思想是负责访问和遍历列表对象,并将其放入迭代器对象中。
- 将遍历机制与List对象允许我们为不同的遍历策略定义迭代器,而无需在List接口中枚举它们。
- 什么时候用:
- 访问聚合对象的内容而不公开其内部表示。
- 支持聚合对象的多次遍历。
- 为遍历不同聚合结构(即支持多态迭代)提供统一的接口。
- 结构:
-
- 协作:一个具体的迭代器能在聚合中跟踪当前对象,并可以计算遍历中的后续对象。
- 后果:
- 它支持聚合遍历中的变体。
- 复合团聚体可以通过许多方式。比如树的遍历方式
- 迭代器简化了聚合接口。
- 聚合上可以挂起n个以上的遍历。
- 迭代器跟踪自己的遍历状态。
- 因此,可以同时进行多个遍历。
- 它支持聚合遍历中的变体。
- 实现:
- 不能被实例化,回去看arraylist
- 外部迭代器:
- 使用活动迭代器的客户机必须推进遍历,并从迭代器显式地请求下一个元素。
- 比被动迭代器更灵活;
-
- 内部迭代器:
迭代器控制迭代;客户端将一个要执行的操作交给一个被动迭代器,迭代器将该操作应用于聚合中的每个元素。
更容易使用,因为它为您定义了迭代逻辑。
-
- 聚合可能定义遍历算法,并使用迭代器只存储迭代的状态(光标),它指向聚合中的当前位置。
-
- 迭代器负责遍历算法,那么在同一个聚合上使用不同的迭代算法很容易,在不同的聚合上重用相同的算法也更容易。
- 如果遍历算法可能需要访问聚合的私有变量,则在聚合的内部类中定义迭代器。
- 静态迭代器:在创建迭代器时包含聚合快照的复制迭代器。遍历方法看不到新的更改。
- 迭代器负责遍历算法,那么在同一个聚合上使用不同的迭代算法很容易,在不同的聚合上重用相同的算法也更容易。
动态迭代器:动态迭代器与静态迭代器相对立。在遍历聚合时,允许对聚合进行任何更改。
-
- 快速失败迭代器在迭代期间更改聚合时直接引发异常。
- 迭代器的最小接口由First、Next、IsDone和currentiem操作组成。
- 过滤迭代器
- 公共迭代器遍历聚合的每个元素。
- 过滤器迭代器计算聚合的元素并返回与某个条件匹配的元素。
-
- 外部迭代器很难通过递归聚合结构(e。,因为结构中的某个位置可能跨多个嵌套聚合级别。
- 活动(外部)迭代器必须存储通过组合以跟踪当前对象。
- 使用被动(内部)迭代器更容易。它可以通过递归调用自身来记录当前位置,从而隐式地将路径存储在调用堆栈中。
- 外部迭代器很难通过递归聚合结构(e。,因为结构中的某个位置可能跨多个嵌套聚合级别。
-
- Null迭代器可以使遍历树结构的聚合(如组合)变得更容易。