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

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

作者: 何笙 | 来源:发表于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