zoukankan      html  css  js  c++  java
  • 迭代器

    什么是迭代器模式

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

    使用场景:

    1.访问一个聚合对象内容而无须暴露它的内部显示

    2.需要为聚合对象提供多种遍历方式

    3.为遍历不同的聚合结构提供一个统一的接口

    迭代器:类继承PHP的Iterator接口,批量操作。

    1. 迭代器模式,在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素。

    2. 相比传统的编程模式,迭代器模式可以隐藏遍历元素的所需操作。

    接口Iterator

    current() 返回当前元素

    key() 返回当前元素的键

    next() 向前移动到下一个元素

    rewind() 返回到迭代器的第一个元素

     1 <?php
     2 /**
     3  * Created by PhpStorm.
     4  * User: guoju
     5  * Date: 2018/12/6
     6  * Time: 22:50
     7  */
     8 class Test implements Iterator{
     9     private $list;
    10     private $i=0;
    11     private $valid=false;
    12     public function __construct($array=array()){
    13         $this->list=$array;
    14     }
    15     /**
    16      * 将索引指定到首个元素
    17      * {@inheritDoc}
    18      * @see Iterator::rewind()
    19      */
    20     function rewind(){
    21         echo '第'.++$this->i.'步:执行 '.__METHOD__.'<br>';
    22         $this->valid=(false !==reset($this->list));
    23     }
    24     /**
    25      * 返回当前元素
    26      * {@inheritDoc}
    27      * @see Iterator::current()
    28      */
    29     function current(){
    30         echo '第'.++$this->i.'步:执行 '.__METHOD__.'<br>';
    31         return current($this->list);
    32     }
    33     /**
    34      * 索引指向下一个元素
    35      * {@inheritDoc}
    36      * @see Iterator::next()
    37      */
    38     function next(){
    39         echo '第'.++$this->i.'步:执行 '.__METHOD__.'<br>';
    40         $this->valid=(false !== next($this->list));
    41     }
    42     /**
    43      * 返回当前元素键值
    44      * {@inheritDoc}
    45      * @see Iterator::key()
    46      */
    47     function key(){
    48         echo '第'.++$this->i.'步:执行 '.__METHOD__.'<br>';
    49         return key($this->list);
    50     }
    51     /**
    52      * 判断下个是否有下个元素
    53      * {@inheritDoc}
    54      * @see Iterator::valid()
    55      */
    56     function valid(){
    57         echo '第'.++$this->i.'步:执行 '.__METHOD__.'<br>';
    58         return $this->valid;
    59     }
    60 }
    61 
    62 $list=array('name'=>'guoguo','pwd'=>'111111');
    63 $test=new Test($list);
    64 //foreach循环方式
    65 foreach ($test as $key=>$val){
    66     echo '输出索引为'.$key.'的元素值为:'.$val.'<br/><br/>';
    67 }
    68 
    69 echo '----------------结束分隔线-----------------------<br/>';
    70 $second=new Test($list);
    71 //while循环方式
    72 $second->rewind();
    73 while($second->valid()){
    74     echo '输出索引为'.$second->key().'的元素值为:'.$second->current().'<br/><br/>';
    75     $second->next();
    76 }
  • 相关阅读:
    我的Java学习推荐书目
    BTrace使用简介
    BTrace使用小结
    如何在生产环境使用Btrace进行调试
    BTrace : Java 线上问题排查神器
    淘宝Tprofiler工具实现分析
    JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码
    性能工具TProfiler介绍文档
    分布式系统理论基础
    微信小程序
  • 原文地址:https://www.cnblogs.com/BrokenHeart/p/10681306.html
Copyright © 2011-2022 走看看