php中的设计模式之--迭代器模式

<?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();
}










郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。