>백엔드 개발 >PHP 튜토리얼 >PHP设计模式--迭代器模式

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

WBOY
WBOY원래의
2016-06-23 13:33:02880검색

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

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


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


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.