美文网首页
设计模式(十七):迭代器模式

设计模式(十七):迭代器模式

作者: 何笙 | 来源:发表于2019-05-17 16:10 被阅读0次

迭代器模式(Iterator),又叫做游标(Cursor)模式。提供一种方法访问一个容器(Container)对象中各个元素,而又不需暴露该对象的内部细节。

当你需要访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式。另外,当需要对聚集有多种方式遍历时,可以考虑去使用迭代器模式。迭代器模式为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪一项等统一的接口。

PHP标准库(SPL)中提供了迭代器接口 Iterator,要实现迭代器模式,实现该接口即可。

示例代码:


class String implements Iterator {
    private $string;
    public function __construct($string)
    {
        $this->string = $this->strToArray($string);
    }
    private function strToArray($string,$l=0) {
        if ($l > 0) {
            $ret = array();
            $len = mb_strlen($string, "UTF-8");
            for ($i = 0; $i < $len; $i += $l) {
                $ret[] = mb_substr($string, $i, $l, "UTF-8");
            }
            return $ret;
        }
        return preg_split("//u", $string, -1, PREG_SPLIT_NO_EMPTY);
    }
    public function current()
    {
        return current($this->string);
    }
    public function next()
    {
        return next($this->string);
    }
    public function key()
    {
        key($this->string);
    }
    public function valid()
    {
        if(key($this->string) === null) {
            return false;
        } else {
            return true;
        }
    }
    public function rewind()
    {
        reset($this->string);
    }
}
//client
$string = new String('这个是什么213jdjlf');

foreach ($string as $k => $v) {
    echo $v."\n";
}

这个设计模式实际业务会很少用到,在定义自己的数据类型时可能会用到, PHP里面的数组已经很逆天了,基本不需要搞自己的数据类型。

相关文章

网友评论

      本文标题:设计模式(十七):迭代器模式

      本文链接:https://www.haomeiwen.com/subject/fjnraqtx.html