• PHP设计模式——迭代模式


    声明:这一系列的博客引用《大话设计模式》。程洁作者。

           迭代器模式:迭代器模式是遍历集合的成熟模式。迭代器模式的关键是将遍历集合的任务交给一个叫做迭代器的对象,它的工作时遍历并选择序列中的对象,而client程序猿不必知道或关心该集合序列底层的结构。


           UML类图:

           


             角色:      

            Iterator(迭代器):迭代器定义訪问和遍历元素的接口

            ConcreteIterator(详细迭代器):详细迭代器实现迭代器接口,对该聚合遍历时跟踪当前位置

            Aggregate (聚合):聚合定义创建对应迭代器对象的接口(可选)

            ConcreteAggregate(详细聚合):详细聚合实现创建对应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例(可选)

           

             核心代码:

             

    <?

    php /** * Created by PhpStorm. * User: Jiang * Date: 2015/6/8 * Time: 21:31 */ //抽象迭代器 abstract class IIterator { public abstract function First(); public abstract function Next(); public abstract function IsDone(); public abstract function CurrentItem(); } //详细迭代器 class ConcreteIterator extends IIterator { private $aggre; private $current = 0; public function __construct(array $_aggre) { $this->aggre = $_aggre; } //返回第一个 public function First() { return $this->aggre[0]; } //返回下一个 public function Next() { $this->current++; if($this->current<count($this->aggre)) { return $this->aggre[$this->current]; } return false; } //返回是否IsDone public function IsDone() { return $this->current>=count($this->aggre)?

    true:false; } //返回当前聚集对象 public function CurrentItem() { return $this->aggre[$this->current]; } }


              调用client測试代码:

             

    header("Content-Type:text/html;charset=utf-8");
    //--------------------------迭代器模式-------------------
    require_once "./Iterator/Iterator.php";
    $iterator= new ConcreteIterator(array('周杰伦','王菲','周润发'));
    $item = $iterator->First();
    echo $item."<br/>";
    while(!$iterator->IsDone())
    {
        echo "{$iterator->CurrentItem()}:请买票。<br/>";
        $iterator->Next();
    }

             使用场景:   

             1.訪问一个聚合对象的内容而无需暴露它的内部表示

             2.支持对聚合对象的多种遍历

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


           欢迎关注我的视频课程。地址例如以下。谢谢。



       PHP面向对象设计模式


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    iOS 设置app语言中文,比如 copy中文,拍照按钮cancel 中文
    kCGImagePropertyExifDictionary 引用错误
    Objective-C中3种枚举比较及KVC两个小技巧
    xcode 调试程序 lldb 使用
    iOS kvo 结合 FBKVOController 的使用
    ios 推送app badge 数字累加操作
    推送未找到应用程序的“aps-environment”的权利字符串错误
    AVAudioPlayer播放在线音频文件
    MPMoviePlayerViewController 视频播放黑屏
    PHP 与 Redis 入门教程
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4878722.html
Copyright © 2020-2023  润新知