迭代器模式,将一个列表从头到尾或者从尾到头进行一次遍历。迭代器模式是被提名要求废除的一种设计模式。因为很多的高级语言,如PHP,Python,JAVA等,都已经拥有了foreach。
迭代器模式:提供一种方法顺序,来访问一个聚合中的各个元素,而不暴露该对象的内部表示。
迭代器模式用来访问一个列表的第一个,最后一个,或者某一个的下一个。
以PHP为代码环境模拟一下迭代器模式的思想。抽象一个Iterator类的理由是有可能是正序,有可能倒序查找。

<?php
abstract class Iterator{
    public function first(){

    }
    public function last(){

    }
}
//正序
class PositiveOrder extends Iterator{
    private $list;
    private $listTmp;
    public function __construct($list){
        $this->list = $list;
        $this->listTmp = array_values($list);
    }
    public function first(){
        return $this->listTmp[0];
    }
    public function last(){
        return $this->listTmp[(count($this->listTmp)-1)];
    }
}
//倒序
class ReverseOrder extends Iterator{
    private $list;
    private $listTmp;
    public function __construct($list){
        $this->list = $list;
        $this->listTmp = array_values($list);
    }
    public function first(){
        return $this->listTmp[(count($this->listTmp)-1)];
    }
    public function last(){
        return $this->listTmp[0];
    }
}

我们还可以去模拟获取某个元素的下一个元素等。
在PHP中,活跃社区的各个开发者都在为PHP的明天做贡献,为我们提供了已经封装好的函数,用来操作PHP数组的内部指针。

next();    定位指针到当前位置的后一个
prev();       定位指针到当前位置的前一个
reset();   重置指针到数组的开始
end();     定位指针到数组的最后
current(); 取得当前指针位置的值
key();     取得当前指针位置的键

使用示例:

<?php
$arr=array("php"=>"脚本","python"=>"脚本","mysql"=>"数据库");
while(list($key,$value)=each($arr)){
    echo $key.'============>'.$value.'<br>';
}
/**
 * 输出结果
 * php============>脚本
 * python============>脚本
 * mysql============>数据库
 */
reset($arr);
while(list($key,$value)=each($arr)){
    echo $key.'============>'.$value.'<br>';
}
/**
 * 输出结果
 * php============>脚本
 * python============>脚本
 * mysql============>数据库
 */
reset($arr);
next($arr);
while(list($key,$value)=each($arr)){
    echo $key.'============>'.$value.'<br>';
}
/**
 * 输出结果
 * python============>脚本
 * mysql============>数据库
 */
end($arr);
echo current($arr).'=============>'.key($arr).'<br>';
/**
 * 输出结果
 * mysql============>数据库
 */
prev($arr);
echo current($arr).'=========>'.key($arr).'<br>';
/**
 * 输出结果
 * python============>脚本
 */

标签: PHP, 设计模式, 迭代器模式

添加新评论