Day33. 迭代器模式

本文同步更新於blog

Iterator Pattern

提供一种方法顺序访问一个聚合对象中的各个元素,

而又不暴露其内部的表示。


迭代器模式会将类别分为两类:
分别是集合类别 (Aggregate / Collection)迭代器类别 (Iterator)

集合类别负责提供统一介面,供所有集合元素使用,使客户与集合元素的实现解耦。

迭代器类别则负责提供在集合元素中游走的方法。


举例:

集合元素 -> 集合类别
歌曲 -> 歌单
菜式 -> 菜单
书本 -> 书单


优点:
分离了集合物件的遍历行为,可以在不暴露集合内部的情况下,供外部存取。
新增/修改遍历规则时,不会影响到集合元素。

缺点:
若只是简单的遍历,可能会是一种过度设计。


其实此模式的实现,现在大都已被封装,只要实现对应的介面就好了。

以PHP而言,主要有以下几个介面与迭代器模式有关。

介面名称 用途
Traversable 所有迭代器介面的源头,主要用来判断能不能用foreach遍历。
IteratorAggregate 集合类别的介面,主要用来提供迭代器,需与Iterator介面一起实作。
Iterator 迭代器的介面,定义了遍历时会用到的方法,需与IteratorAggregate介面一起实作。

其他SPL (Standard PHP Library) 的Iterator


ʕ •ᴥ•ʔ:让我们一起欣赏这个古老的模式!


<<:  32.Module2

>>:  後记

Day 1 Docker 初探

话说从前 自从电脑问世以来,若要将程序无缝的转移到其他机器上成功运行,那麽环境架设就是一个必须要优先...

Promise实际操演

Promise JavaScript 是属於同步的程序语言,因此一次仅能做一件事情,但遇到非同步的事...

[第五天]从0开始的UnityAR手机游戏开发-如何在Vuforia创建可辨识图片

第四天的小试身手解答:将Unity介面改为2By3,Project从Two Column Layou...

Day 17 - Remove Duplicates from Sorted List

大家好,我是毛毛。ヾ(´∀ ˋ)ノ 废话不多说开始今天的解题Day~ 83. Remove Dupl...

【从零开始的Swift开发心路历程-Day2】牛刀小试

昨天轻松的安装完Xcode环境後,想必各位已经迫不及待想大显身手了吧! 但是吃紧弄破碗,就让我们先来...