<?php
/**
迭代器模式 :迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF给出的定义为:
供给一种办法拜访一个容器(container)对象中各个元素,而又不需裸露该对象的内部细节。
迭代器模式是为容器而生。很显著,对容器对象的拜访必定触及到遍历算法。你可以一股脑的将遍历办法塞到容器对象中去;
或基本不去供给甚么遍历算法,让应用容器的人自己去实现去吧。
(1) 须要一个容器
(2) 遍历办法便可
迭代器模式由以下角色组成:
1) 迭代器角色(Iterator):迭代器角色负责定义拜访和遍历元素的接口。
2) 具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记载遍历中确当前地位。
3) 容器角色(Container):容器角色负责供给创立具体迭代器角色的接口。
4) 具体容器角色(Concrete Container):具体容器角色实现创立具体迭代器角色的接口——这个具体迭代器角色于该容器的构造相干。
*/
//(1)迭代器(Iterator):在迭代进程上的抽象,包含next(),isFinished(),current()等办法。
//(2)具体迭代器(ConcreteIterators):在一个特定的对象集,如数组,树,组合,聚集等上实现迭代。
//(1) 如果应用php 内部的iterator
class myiterator implements Iterator{
private $myiterator; // 空实例
private $position; // 下标
public function __construct(array $iterator){
$this->myiterator = $iterator;
$this->position = 0 ;
}
// 获得当前
function current() {
return $this->myiterator[$this->position];
}
// 下个index
function next(){
++$this->position ;
}
//取得key(下标)
function key(){
return $this->position;
}
function value(){
return $this->myiterator[$this->position];
}
// 重新遍历
function rewind() {
$this->position = 0;
}
function valid(){
return isset($this->myiterator[$this->position]);
}
}
// 运用
/*
$aData = array("a","b","c");
$myiterator = new myiterator($aData);
while($myiterator->valid()){
$myiterator->next();
}
*/
// (2)搭建自己的容器
interface container {
public function getIterator();
}
class myContainer implements container{
private $iterator ;
public function __construct($data){
$this->iterator = new myiterator($data) ;
}
public function getIterator(){
return $this->iterator;
}
}
// 运用实例
$data = array("a","b","c");
$myContainer = new myContainer($data) ;
// 取得迭代器
$myiterator = $myContainer->getIterator();
while($myiterator->valid()){
var_dump($myiterator->current());
$myiterator->next();
}
<?php
/**
迭代器模式 :迭代器(Iterator)模式,又叫做游标(Cursor)模式。