首頁 > 後端開發 > php教程 > PHP设计模式--迭代器模式

PHP设计模式--迭代器模式

WBOY
發布: 2016-06-23 13:33:02
原創
880 人瀏覽過

声明:本系列博客参考资料《大话设计模式》,作者程杰。

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


       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>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];    }}</count>
登入後複製

          调用客户端测试代码:

         

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面向对象设计模式


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板