设计模式之迭代器模式--foreach循环的原理

设计模式之迭代器模式–foreach循环的原理

迭代器模式是迭代,循环,一般在语言层面都实现了。

提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。

为什么要使用迭代器模式

因为要循环啊,总有循环遍历的需求,所以就要使用迭代器模式了。

不过这些语言都内置了,比如foreach这种。那么foreach是怎么实现可以遍历的呢?

php实现迭代器模式

迭代器主要就是一个一个循环,那么需要有下一个的方法,也就是next,有下一个就需要判断是否可以循环,那么要有一个hasNext方法。

首先定义一个接口

/**
 * 迭代器模式
 * 迭代器接口
 */
interface Iterator{
    function next();

    function hasNext();
}

然后实现一个迭代器,继承这个接口


/**
 * 迭代器模式
 * 迭代器接口
 */
class Iterate implements Iterator{

    private $arr = [];
    private $current = 0;

    function __construct(Array $arr) {
        $this->arr = $arr;
    }

    /**
     * 获取下一个元素
     */
    function next() {
        $value = null;
        if ($this->hasNext()) {
            $value = $this->arr[$this->current];
            $this->current++;
        }
        return $value;
    }

    /**
     * 判断是否有下一个元素
     */
    function hasNext() {
        return $this->current < count($this->arr) ? true : false;
    }
}

客户端使用

$arr= [1,2,3];
$iterator = new iterator($arr);
while($iterator->hasNext()) {
    dump($iterator->next());
}

dump('foreach实现');

foreach($arr as $value) {
    dump($value);
}

在这里插入图片描述
可以看到和foreach的效果一模一样了。这就是迭代器模式,不过php已经有iterator这个接口了。

代码放在了我的github上面。

原创文章 84 获赞 7 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Thepatterraining/article/details/106003227
今日推荐