注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Copper peas ' Bolg

Keep On Moving...This Is My Life...

 
 
 

日志

 
 

【原】 PHP 设计模式二十二之迭代器设计模式  

2011-06-28 23:20:27|  分类: php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

<?php
/**
 * 迭代器设计模式
 * 定义:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。
 * @anthor Chen Wei Han <csq-3@163.com>
 * @copyright Chen Wei Han 2011-6-28下午10:22:03
 * @link http://csq-3.blog.163.com
 * @package demo
 */

/**
 * 迭代抽象类
 */
abstract class abstract_Iterator
{
 abstract public function first();
 abstract public function next();
 abstract public function isdone();
 abstract public function currentitem();
}

/**
 * 聚集抽象类
 */
abstract class abstract_Aggregate
{
 abstract public function createiterator();
}

/**
 * 实现迭代类
 */
class ConcreteIterator extends abstract_Iterator
{
 private $aggregate  = array();
 
 private $current = 0;
 
 /**
  * 获取集合
  * @param  $aggregate
  */
 public function __construct($aggregate)
 {
  $this->aggregate = $aggregate;
 }
 
 /**
  * 第一个对象
  * @see abstract_Iterator::first()
  */
 public function first()
 {
  return $this->aggregate[0];
 }
 
 /**
  * 下一个对象
  * @see abstract_Iterator::next()
  */
 public function next()
 {  
  $this->current++;
  if($this->current < count($this->aggregate)+1)
  {
   return $this->aggregate[$this->current-1];
  }
  
 }
 
 /**
  * 判断是否到结尾
  * @see abstract_Iterator::isdone()
  */
 public function isdone()
 {
  return $this->current >= count($this->aggregate)?true:false;
 }
 
 /**
  * 返回当前对象
  */
 public function currentitem()
 {
  return $this->aggregate[$current];
 }
}

/**
 * 具体集合类
 */
class ConcreteAggregate extends abstract_Aggregate
{
 private $list = array();
 
 public function createiterator()
 {
  return new ConcreteIterator($this->getlist());
 }
 
 public function count()
 {
  return count($this->list);
 }
 
 public function getlist()
 {
  return $this->list;
 }
 
 public function setlist($list)
 {
        $this->list[] = $list;
 }
}

$concreteaggregate = new ConcreteAggregate();

$concreteaggregate->setlist("A");
$concreteaggregate->setlist("B");
$concreteaggregate->setlist("C");

$i = $concreteaggregate->createiterator();

echo $i->first();
while(!$i->isdone())
{
 echo $i->next();
}

  评论这张
 
阅读(131)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018