加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

PHP设计模式—迭代器模式

发布时间:2021-05-21 07:04:53 所属栏目:大数据 来源: https://www.jb51.cc
导读:? 定义: 迭代器模式(Iterator): 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 ? 结构: Iterator: 迭代器接口,用于定义得到开始对象、得到下一个对象、判断是否到有效、当前对象等抽象方法,统一接口,目前PHP已经集成

?

定义:

迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。

?

结构:

  • Iterator:迭代器接口,用于定义得到开始对象、得到下一个对象、判断是否到有效、当前对象等抽象方法,统一接口,目前PHP已经集成有该类。
  • IteratorAggregate:容器接口,目前PHP已经集成有该类。
  • ConcreteAggregate:具体容器类,继承IteratorAggregate。
  • ConcreteIterator:具体迭代器类,继承Iterator。
  • Client:客户端代码。

?

代码实例:

/**
 * IteratorAggregate 源码
 * Interface to create an external Iterator.
 * @link https://PHP.net/manual/en/class.iteratoraggregate.PHP
 */
interface IteratorAggregate extends Traversable {

    *
     * Retrieve an external iterator
     * @link https://PHP.net/manual/en/iteratoraggregate.getiterator.PHP
     * @return Traversable An instance of an object implementing <b>Iterator</b> or
     * <b>Traversable</b>
     * @since 5.0.0
     */
    public function getIterator();
}

*
 * Iterator源码
 * Interface for external iterators or objects that can be iterated
 * themselves internally.
 * @link https://PHP.net/manual/en/class.iterator.PHP
 interface Iterator *
     * Return the current element
     * @link https://PHP.net/manual/en/iterator.current.PHP
     * @return mixed Can return any type.
     * @since 5.0.0
     function current();

    *
     * Move forward to next element
     * @link https://PHP.net/manual/en/iterator.next.PHP
     * @return void Any returned value is ignored.
     * @since 5.0.0
     next*
     * Return the key of the current element
     * @link https://PHP.net/manual/en/iterator.key.PHP
     * @return mixed scalar on success,or null on failure.
     * @since 5.0.0
     key*
     * Checks if current position is valid
     * @link https://PHP.net/manual/en/iterator.valid.PHP
     * @return boolean The return value will be casted to boolean and then evaluated.
     * Returns true on success or false on failure.
     * @since 5.0.0
      valid();

    *
     * Rewind the Iterator to the first element
     * @link https://PHP.net/manual/en/iterator.rewind.PHP
     * @return void Any returned value is ignored.
     * @since 5.0.0
     rewind();
}


*
 * 具体聚集类
 * Class ConcreteAggregate
 class ConcreteAggregate implements IteratorAggregate
{
    private $data = [];

    *
     * 往迭代器里面添加数据
     function add($name)
    {
        $this->data[] = ;
    }

    *
     * 获取迭代器
     * @return ConcreteIterator|Traversable
      getIterator()
    {
        // TODO: Implement getIterator() method.
        return new ConcreteIterator($this->data);
    }
}


*
 * 具体迭代器类
 * Class ConcreteIterator
 class ConcreteIterator  Iterator
{
    $key = 0;
    function __construct($data$this->data = ;
        key = 0*
     * 返回当前元素
     ()
    {
         TODO: Implement current() method.
        return $this->data[];
    }

    *
     * 前进到下一个元素
      TODO: Implement next() method.
        key++*
     * 返回当前元素的键
      TODO: Implement key() method.
        *
     * 检查当前位置是否有效
      valid()
    {
         TODO: Implement valid() method.
        isset(]);
    }


    *
     * 将Iterator倒退到第一个元素
      TODO: Implement rewind() method.
        ;
    }
}


 客户端调用
$concreteAggregate = new ConcreteAggregate();
$concreteAggregate->add('张三');
$concreteAggregate->add('李四'$concreteAggregate->add('王五');

$concreteIterator = $concreteAggregate->getIterator();
foreach ($concreteIterator as $concrete) {
    echo $concrete . "<br>";
}


 结果
张三
李四
王五

?

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读