迭代器模式(Iterator)
是一种对象行为型模式,使用频率很高。
输出结果:
最常见的使用就是通过遍历功能把数据从聚合对象中分离出来。
迭代器也是操作聚合对象的基本手段,包括的方法有:获取第一个元素的First(),访问下一个元素的Next(),判断是否还有下一个元素的IsExist(),获取当前元素的currentItem()。
有点类似于把数组转变成单个字符串的过程。包含一个抽象迭代器和一个具体迭代器,代码如下:
<?php
echo "<pre>";
// 迭代器模式 index.php
header("Content-Type:text/html;charset=utf-8");
require_once "Iterator.php";
echo "-------------------数组-------------------<br/>";
// 构建数组
$arr = array("one","two","three");
print_r($arr);
// 传值进迭代器
$iterator = new ConcreteIterator($arr);
echo "------------------第一个数-----------------<br/>";
// 取出第一个数
echo $iterator->First()."<br/>";
echo "------------------遍历输出-----------------<br/>";
// 剥离数组 循环输出
while (!$iterator->IsExist())
{
<span style="white-space:pre;"> </span>// 输出当前数据
<span style="white-space:pre;"> </span>echo "{$iterator->CurrentItem()}<br/>";
// 指到下个数据
<span style="white-space:pre;"> </span>$iterator->Next();
}
<?php
// 抽象迭代器
abstract Class IIterator
{
/**
* 获取第一个元素
* @access public
*/
abstract function First();
/**
* 访问下一个元素
* @access public
*/
abstract function Next();
/**
* 判断是否还有下一个元素
* @access public
*/
abstract function IsExist();
/**
* 获取当前元素
* @access public
*/
abstract function currentItem();
}
// 具体迭代器
Class ConcreteIterator extends IIterator
{
/**
* 数据数组
* @var array
*/
private $aggre;
/**
* 游标(数组下标)
* @var int
*/
private $curr = 0;
/**
* 构造方法
* @access public
* @param array $_aggre 数组值
*/
function __construct($_aggre)
{
$this->aggre = $_aggre;
}
/**
* 获取第一个元素方法
* @access public
*/
function First()
{
return $this->aggre[0];
}
/**
* 获取下一个元素方法
* @access public
*/
function Next()
{
$this->curr++;
if($this->curr<count($this->aggre))
{
return true;
}
return false;
}
/**
* 检测存在值方法
* @access public
*/
function IsExist()
{
return $this->curr>=count($this->aggre)?true:false;
}
/**
* 获取当前数据方法
* @access public
*/
function currentItem()
{
return $this->aggre[$this->curr];
}
}
输出结果:
-------------------数组------------------- Array ( [0] => one [1] => two [2] => three ) ------------------第一个数----------------- one ------------------遍历输出----------------- one two three