php设计模式(12)迭代器模式

2017-03-23 10:35:37 admin ...

前言:

PHP编码中,使用迭代器相对于JAVA使用较少,并且PHP的SPL扩展中有相关的类和应用,我们有时间再一起讨论,这里我们仅仅讨论迭代器模式。

内容概要:

1、什么是迭代器模式
2、UML
3、示例代码

一、什么是迭代器模式

迭代器模式又叫游标模式,他提供一种一种调用接口,用于访问容器对象元素的一种方法,调用者不用也不必知道容器对象的具体实现细节,只需按照迭代规则访问容器对象的元素。

在实际PHP编码中,我们经常遇到各种变量代码,循环流程foreach出现在好多PHP编码中,而如果使用迭代器模式,可以对不同的数据集合进行封装,外用调用者只需使用迭代器提供的接口即可。

迭代器模式为不同的容器对象规范了统一的接口,支持多态迭代,对容器对象提供多种遍历,且不会暴露容器对象的具体实现细节,从而达到高扩展,强规范和安全的目的。

缺点是:这样提高了系统的复杂性和前端php程序员编码难度。

二、UML

图来源于网上

三、示例代码:

<?php
/************************************************************
** @Description: php设计模式之迭代器模式
** @Author: haodaquan
** @Date:   2017-03-23 09:46:55
** @Last Modified by:   haodaquan
** @Last Modified time: 2017-03-23 10:48:33
*************************************************************/

class ConcreteIterator implements Iterator{
    private $position = 0;//游标位置
    private $arr; //容器对象

    public function __construct(array $arr){
        $this->arr = $arr;
    }
    #将游标放到起始位置
    public function rewind(){
        $this->position = 0;
    }
    #当前游标对应的值
    public function current(){
        return $this->arr[$this->position];
    }

    #当前游标
    public function key(){
        return $this->position;
    }
    #下一个游标
    public function next(){
        ++$this->position;
    }
    #删除游标对应的值
    public function valid(){
        return isset($this->arr[$this->position]);
    }
}

#使用 
$arr = ['www.haodaquan.com','PHP','在路上'];
$concreteIterator = new ConcreteIterator($arr);
foreach ($concreteIterator as $key => $value) {
    echo $key."=>".$value."\n";
}

仓促成文,请大家指正。

相似文章