PHP设计模式之迭代器模式

迭代器:迭代器设计模式可帮助构造特定对象, 那些对象能够提供单一标准接口循环或迭代任何类型的可计数数据。
处理需要遍历的可计数数据时, 最佳的解决办法是创建一个基于迭代器设计模式的对象。


  1. <?php   
  2. class CD {   
  3.        
  4.     public $band  = "";   
  5.     public $title = "";   
  6.     public $trackList = array();   
  7.        
  8.     public function __construct($band, $title) {   
  9.         $this->band  = $band;   
  10.         $this->title = $title;   
  11.     }   
  12.        
  13.     public function addTrack($track) {   
  14.         $this->trackList[] = $track;   
  15.     }   
  16. }   
  17.    
  18. class CDSearchByBandIterator implements Iterator {   
  19.        
  20.     private $_CDs   = array();   
  21.     private $_valid = FALSE;   
  22.        
  23.     public function __construct($bandName) {   
  24.         $db = mysql_connect("localhost", "root", "root");   
  25.         mysql_select_db("test");   
  26.            
  27.         $sql  = "select CD.id, CD.band, CD.title, tracks.tracknum, tracks.title as tracktitle ";   
  28.         $sql .= "from CD left join tracks on CD.id = tracks.cid ";   
  29.         $sql .= "where band = '" . mysql_real_escape_string($bandName) . "' ";   
  30.         $sql .= "order by tracks.tracknum";   
  31.            
  32.         $results = mysql_query($sql);   
  33.    
  34.         $cdID = 0;   
  35.         $cd   = NULL;   
  36.            
  37.         while ($result = mysql_fetch_array($results)) {   
  38.             if ($result["id"] !== $cdID) {   
  39.                 if ( ! is_null($cd)) {   
  40.                     $this->_CDs[] = $cd;   
  41.                 }   
  42.                    
  43.                 $cdID = $result['id'];   
  44.                 $cd   = new CD($result['band'], $result['title']);   
  45.             }   
  46.                
  47.             $cd->addTrack($result['tracktitle']);   
  48.         }   
  49.            
  50.         $this->_CDs[] = $cd;   
  51.     }   
  52.        
  53.     public function next() {   
  54.         $this->_valid = (next($this->_CDs) === FALSE) ? FALSE : TRUE;   
  55.     }   
  56.        
  57.     public function rewind() {   
  58.         $this->_valid = (reset($this->_CDs) === FALSE) ? FALSE : TRUE;   
  59.     }   
  60.        
  61.     public function valid() {   
  62.         return $this->_valid;   
  63.     }   
  64.        
  65.     public function current() {   
  66.         return current($this->_CDs);   
  67.     }   
  68.        
  69.     public function key() {   
  70.         return key($this->_CDs);   
  71.     }   
  72. }   
  73.    
  74. $queryItem = "Never Again";   
  75.    
  76. $cds = new CDSearchByBandIterator($queryItem);   
  77.    
  78. print "<h1>Found the Following CDs</h1>";   
  79. print "<table border='1'><tr><th>Band</th><th>Ttile</th><th>Num Tracks</th></tr>";   
  80. foreach ($cds as $cd) {   
  81.     print "<tr><td>{$cd->band}</td><td>{$cd->title}</td><td>";   
  82.     print count($cd->trackList). "</td></tr>";   
  83. }   
  84. print "</table>";   
  85. ?> 

 数据库脚本请参照:http://www.cxybl.com/html/wlbc/Php/2011_1126_9458.html

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据
, 迭代器
, 对象
, 接口
, 迭代器模式
, 设计模式
, 迭代
, PHP迭代器模式
, 特定
迭代模式
php迭代器模式、迭代器设计模式、迭代器模式、迭代器模式 java、c 迭代器模式,以便于您获取更多的相关知识。

时间: 2024-12-09 15:53:21

PHP设计模式之迭代器模式的相关文章

深入理解JavaScript系列(35):设计模式之迭代器模式详解

 这篇文章主要介绍了深入理解JavaScript系列(35):设计模式之迭代器模式详解,迭代器模式(Iterator):提供一种方法顺序一个聚合对象中各个元素,而又不暴露该对象内部表示,需要的朋友可以参考下     介绍 迭代器模式(Iterator):提供一种方法顺序一个聚合对象中各个元素,而又不暴露该对象内部表示. 迭代器的几个特点是: 1.访问一个聚合对象的内容而无需暴露它的内部表示. 2.为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作. 3.遍历的同

PHP设计模式之迭代器模式_php实例

在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素而又不暴露该对象的内部表示,这就是PHP迭代器模式的定义. 适用场景: 访问一个聚合对象的内容而无需暴露它的内部表示 支持对聚合对象的多种遍历 为遍历不同的聚合结构提供一个统一的接口 迭代器模式实例: <?php class ConcreteIterator implements Iterator{ private $position = 0; private $arr; function __construct(array $arr){

Java使用设计模式中迭代器模式构建项目的代码结构示例_java

迭代器(Iterator)模式,又叫做游标(Cursor)模式.GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节.  迭代器模式由以下角色组成:迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口. 具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置. 容器角色(Container):容器角色负责提供创建具体迭代器角色的接口. 具体容器角色(Concrete

学习JavaScript设计模式之迭代器模式_javascript技巧

迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示. JavaScript中的Array.prototype.forEach 一.jQuery中的迭代器 $.each([1, 2, 3], function(i, n) { console.log("当前下标为:"+ i + " 当前元素为:"+ n ); }); 二.实现自己的迭代器 var each = function(ary, callback) { for(var i

Head First设计模式之迭代器模式

一.定义 提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示: 主要解决:不同的方式来遍历整个整合对象. 何时使用:遍历一个聚合对象. 如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象. 二.结构 组成: 抽象容器:一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等. 具体容器:就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,S

深入浅出Java设计模式之迭代器模式

一.引言 迭代这个名词对于熟悉Java的人来说绝对不陌生.我们常常使用JDK提供的迭代接口进行java collection的遍历: Iterator it = list.iterator(); while(it.hasNext()){ //using "it.next();"do some businesss logic } 而这就是关于迭代器模式应用很好的例子. 二.定义与结构 迭代器(Iterator)模式,又叫做游标(Cursor)模式.GOF给出的定义为:提供一种方法访问一个

iOS设计模式之迭代器模式

迭代器模式 基本理解 迭代器模式(Iterrator):提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露该元素的内部表示. 当你访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,你就应该考虑用迭代器模式. 你需要对聚集有多种方式遍历时,可以考虑用迭代器模式. 迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据. 迭代器定义了一个用于访问集合元素并记录当前元素的接口. 不同的迭代器可以执行不同

PHP设计模式之迭代器模式的深入解析_php技巧

迭代器(Iterator)模式,它在一个很常见的过程上提供了一个抽象:位于对象图不明部分的一组对象(或标量)集合上的迭代.迭代有几种不同的具体执行方法:在数组属性,集合对象,数组,甚至一个查询结果集之上迭代. 在对象的世界里,迭代器模式要维持类似数组的功能,看作是一个非侵入性对象刻面(facet),Client类往往分离自真实对象实现,指iterator接口.只要有可能,我们可以给迭代器传送一个引用,代替将来可能发生变化的具体或抽象类.参与者:◆客户端(Client):引用迭代器模式的方法在一组

传统设计模式(九)迭代器模式

关于迭代器模式,我们所需要知道的第一件事情就是它依赖于一个名为迭代器的接口.一旦我们有了这个接口,就可以为各种那个对象集合实现迭代器:数组.列表.散列表. 项目实例我们就拿用户角色模块来举例 背景 1.某用户作为应用管理员获取一组关于管理角色的arraylist权限组 2.该用户作为应用开发者获取一组关于开发角色的数组形式的权限组 ... /// <summary> /// 迭代器接口 /// </summary> public interface RoleIterator { /