前言:
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";
}
仓促成文,请大家指正。