2020年11月24日星期二

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 extends Traversable { /**  * Return the current element  * @link https://php.net/manual/en/iterator.current.php  * @return mixed Can return any type.  * @since 5.0.0  */ public 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  */ public function 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  */ public function 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  */ public function 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  */ public function rewind();}/** * 具体聚集类 * Class ConcreteAggregate */class ConcreteAggregate implements \IteratorAggregate{ private $data = []; /**  * 往迭代器里面添加数据  */ public function add($name) {  $this->data[] = $name; } /**  * 获取迭代器  * @return ConcreteIterator|\Traversable  */ public function getIterator() {  // TODO: Implement getIterator() method.  return new ConcreteIterator($this->data); }}/** * 具体迭代器类 * Class ConcreteIterator */class ConcreteIterator implements \Iterator{ private $key = 0; private $data = []; public function __construct($data) {  $this->data = $data;  $this->key = 0; } /**  * 返回当前元素  */ public function current() {  // TODO: Implement current() method.  return $this->data[$this->key]; } /**  * 前进到下一个元素  */ public function next() {  // TODO: Implement next() method.  return $this->key++; } /**  * 返回当前元素的键  */ public function key() {  // TODO: Implement key() method.  return $this->key; } /**  * 检查当前位置是否有效  */ public function valid() {  // TODO: Implement valid() method.  return isset($this->data[$this->key]); } /**  * 将Iterator倒退到第一个元素  */ public function rewind() {  // TODO: Implement rewind() method.  return $this->key = 0; }}// 客户端调用$concreteAggregate = new ConcreteAggregate();$concreteAggregate->add('张三');$concreteAggregate->add('李四');$concreteAggregate->add('王五');$concreteIterator = $concreteAggregate->getIterator();foreach ($concreteIterator as $concrete) { echo $concrete . "<br>";}// 结果张三李四王五

 









原文转载:http://www.shaoqun.com/a/493010.html

catch:https://www.ikjzd.com/w/832

亚马逊全球开店制造:https://www.ikjzd.com/w/204.html

c79:https://www.ikjzd.com/w/1016


定义:迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。结构:Iterator:迭代器接口,用于定义得到开始对象、得到下一个对象、判断是否到有效、当前对象等抽象方法,统一接口,目前PHP已经集成有该类。IteratorAggregate:容器接口,目前PHP已经集成有该类。ConcreteAggregate:具体容器类,继承IteratorAg
史泰博:史泰博
002315焦点科技:002315焦点科技
迪拜土豪"包养"韩国小萝莉 揭真实迪拜生活(全文):迪拜土豪"包养"韩国小萝莉 揭真实迪拜生活(全文)
从暴力刷评中省下来的预算,亚马逊卖家们都用到哪里了:从暴力刷评中省下来的预算,亚马逊卖家们都用到哪里了
去上海迪士尼怎么安排住宿,去上海迪士尼玩住哪里方便,上海迪:去上海迪士尼怎么安排住宿,去上海迪士尼玩住哪里方便,上海迪

没有评论:

发表评论