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

时间: 2024-11-06 10:10:41

php中的设计模式之--迭代器模式的相关文章

【设计模式】——迭代器模式

迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示.当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,或者你需要对聚集有多种方式遍历时,你就应该考虑用迭代器模式,为遍历不同的聚集结构提供如开始.下一个.是否结束.当前哪一项等统一接口. #include <iostream> #include <vector> using namespace std; typedef string object; //Iterato

设计模式之迭代器模式详解(foreach的精髓)

作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 各位好,很久没以LZ的身份和各位对话了,前段时间为了更加逼真的解释设计模式,LZ费尽心思给设计模式加入了故事情节,本意是为了让各位在看小说的过程中就可以接触到设计模式,不过写到现在,LZ最深的感触就是,构思故事的时间远远超过了LZ对设计模式本身的研究. 本章介绍迭代器模式,不再采用故事嵌入的讲解方式,主要原因是因为迭代器模式本

设计模式之迭代器模式(Iterator)

1.定义 迭代器模式提供一种方法访问一个容器对象中的各个元素,而又不需暴露该对象的内部细节. 基本上没有人会单独写一个迭代器,除非是产品性质的开发. 2.通用类图 Iterator抽象迭代器:抽象迭代器负责定义访问和遍历元素的接口,而且基本上是有固定的3个方法:first()获得第一个元素:next()访问下一个元素:isDone()是否已经访问到底部(Java 叫做hasNext()方法). ConcreteIterator具体迭代器:具体迭代器角色要实现迭代器接口,完成容器元素的遍历. Ag

2018.4.30 设计模式之迭代器模式

设计模式之迭代器模式 1.定义/概念 迭代器模式是Java和.Net编程环境中非常常用的设计模式.这种设计模式用于顺序访问集合对象的元素要知道集合对象的底层表示.迭代器模式属于行为型模式 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示. 2.角色和定义 ● Iterator抽象迭代器 抽象迭代器负责定义访问和遍历元素的接口,而且基本上是有固定的3个方法:first()获得第一个元素,next()访问下一个元素,isDone()是否已经访问

Python进阶:设计模式之迭代器模式

在软件开发领域中,人们经常会用到这一个概念--"设计模式"(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一本圣经级的书籍<设计模式:可复用面向对象软件的基础>(1991年,Design Patterns - Elements of Reusable Object-Oriented Software)中,它提出了23种设计模式.迭代器模式就是其中的一种,在各种编程语言中都得到了广泛的应用. 本文将谈谈 Python 中的迭代器模式,主要内

【设计模式】迭代器模式

迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式.这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示. 迭代器模式属于行为型模式. 介绍 意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示. 主要解决:不同的方式来遍历整个整合对象. 何时使用:遍历一个聚合对象. 如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象. 关键代码:定义接口:hasNext, next. 应用实例:JAVA 中的

php设计模式之迭代器模式

今天的PHP设计模式系列的主角是迭代器(Iterator)模式,迭代器模式提供了抽象:位于对象图不明部分的一组对象(或标量)集合上的迭代. 迭代器(Iterator)模式,它在一个很常见的过程上提供了一个抽象:位于对象图不明部分的一组对象(或标量)集合上的迭代.迭代有几种不同的具体执行方法:在数组属性,集合对象,数组,甚至一个查询结果集之上迭代. 在对象的世界里,迭代器模式要维持类似数组的功能,看作是一个非侵入性对象刻面(facet),Client类往往分离自真实对象实现,指iterator接口

设计模式之迭代器模式--- Pattern Iterator

模式的定义 迭代器模式定义: Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation. 提供一种方法访问一个容器对象中各个元素,而又不需要暴露对象的内部细节. 类型 行为类 模式的使用场景 方便遍历访问容器内的元素 优点 面向对象设计原则中的单一职责原则,对于不同的功能,我们要尽可能的把这个功能分解出单一的职责,不

设计模式之迭代器模式(Iterator Pattern)

这篇博客,我们要详细讲解的是迭代器模式(Iterator Pattern),将要讲解的内容有:迭代器模式 的定义,作用,详细设计分析等方面. 一.Pattern name 迭代器模式(Iterator Pattern) : 提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示.--<设计模式 可复用面向对象软件的基础> 二.Problem 在我们实际编程的过程中,经常会遇到下面这种情况: 当我们需要遍历某个集合的时候,常常调用某个类的一个方法,返回一个集合类型的数据,如下: