迭代器模式

  1. 概念

    迭代器模式是遍历集合的成熟模式,迭代器模式的关键是将遍历集合的任务交给一个叫做迭代器的对象,它的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该集合序列底层的结构。

  2. 说明

    • 迭代器模式(Iterator),又叫做游标(Cursor)模式,提供一种方法访问一个容器(Container)对象中各个元素,而又不需要暴露该对象的内部细节。
    • 当你需要访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式。另外,当需要对聚集有多种方式遍历时,可以考虑去使用迭代器模式。迭代器模式为遍历不同的聚合结构提供如开始、下一个、是否结束、当前哪一项等统一的接口。
  1. 作用
    • 我们想要像遍历数组那样,遍历对象,或是遍历一个容器。
    • 迭代器模式可以隐藏遍历元素所需的操作
  2. 应用场景
    • 访问一个聚合对象的内容而无需暴露它的内部表示
    • 支持对聚合对象的多种遍历
    • 为遍历不同的聚合结构提供一个统一的接口。
  3. 角色
    • Iterator(迭代器):迭代器定义访问和遍历元素的接口
    • ConcreteIterator(具体迭代器):具体迭代器实现迭代接口,对该聚合遍历时跟踪当前位置
    • Aggregate(聚合):聚合定义创建相应迭代器对象的接口。
    • ConcreteAggregate(具体聚合):具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
//自定义迭代器实现系统定义迭代器接口
class MyIterator implements Iterator
{

protected $data = [];
protected $index;

public function __construct($data)
{
$this->data = $data;
$this->index = 0;
}


//返回第一个元素
public function rewind()
{
$this->index = 0;
}

//下一个元素
public function next()
{
$this->index++;
}

//验证是否继续
public function valid()
{
return $this->index < count($this->data);
}

//返回key值
public function key()
{
return $this->index;
}

//返回当前元素
public function current()
{
return $this->data[$this->index];
}
}

$arr = [1, 2, 3, 4, 5, 6];
$iterate = new MyIterator($arr);
foreach ($iterate as $dynasty) {
echo 'the obj == ' . $dynasty;
}