迭代器模式:
  迭代器模式是遍历集合的成熟模式,迭代器模式的关键是将遍历集合的任务交给一个叫做迭代器的对象,它的工作时遍历并选择序列中的对象,而客户端程序员不必知道或关心该集合序列底层的结构。

角色:
  Iterator(迭代器):迭代器定义访问和遍历元素的接口
  ConcreteIterator(具体迭代器):具体迭代器实现迭代器接口,对该聚合遍历时跟踪当前位置
  Aggregate (聚合):聚合定义创建相应迭代器对象的接口(可选)
  ConcreteAggregate(具体聚合):具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例(可选)

UML类图:

  

适用性:
  访问一个聚合对象的内容而无需暴露它的内部表示。
  支持对聚合对象的多种遍历。
  为遍历不同的聚合结构提供一个统一的接口(即, 支持多态迭代)。

//代码实现:

<?php
header("Content-type:text/html;Charset=utf-8");
//迭代器接口,注意不要使用Iterator命名,其为内置接口
abstract class IIterator{
abstract function firstValue(); //获取聚合中第一个元素
abstract function nextValue(); //获取聚合中下一个元素
abstract function currentValue(); //获取聚合中当前元素
abstract function isFinished(); //判断该聚合是否已被遍历完
}
//具体迭代器
class ConcreteIterator extends IIterator{
private $aggr; //具体聚合元素
private $currentKey = 0;
function __construct($aggr){
$this->aggr = $aggr;
}
//获取第一个元素
function firstValue(){
return $this->aggr[0];
}
//获取下一个元素
function nextValue(){
$this->currentKey++;
if($this->currentKey<count($this->aggr)){
return $this->aggr[$this->currentKey];
}
return false;
}
//获取当前元素
function currentValue(){
return $this->aggr[$this->currentKey];
}
//当前聚合是否已经遍历完成
function isFinished(){
return $this->currentKey>=count($this->aggr)?true:false;
}
} //测试
$iterator = new ConcreteIterator(array("张三","李四","王五"));
echo $iterator->firstValue();
echo $iterator->nextValue();
echo $iterator->currentValue();
?>

最新文章

  1. 跨平台的 .NET 运行环境 Mono 3.2 新特性
  2. 启动tomcat时遇到的问题
  3. iOS App打包上架的流程
  4. wego微购RSS、Sitemap、Ping、腾讯拍拍网购采集插件
  5. c 函数及指针学习 9
  6. PAT-乙级-1008. 数组元素循环右移问题 (20)
  7. PHP+Mysql-表单数据插入数据库及数据提取完整过程
  8. Core Data 学习简单整理01
  9. Https协议简析及中间人攻击原理
  10. OC-方法
  11. Amdahl&#39;s Law
  12. UI设计|PS软件操作应用——GIF动图
  13. 前端学习之jquery/下
  14. UOJ#345. 【清华集训2017】榕树之心 贪心,动态规划
  15. FFT快速傅里叶变换算法
  16. ubuntu16.04下搜狗输入法异常
  17. 火狐浏览器flash经常奔溃的
  18. jsf的运行原理及生命周期
  19. UVA 11945 Financial Management 水题
  20. C语言实现---学生成绩管理系统

热门文章

  1. eclipse创建maven项目出现以下报错: org.apache.maven.archiver.MavenArchiver.getManifest (org.apache.maven.project.MavenProject,org.apache.mav en.archiver.MavenArchiveConfiguration)
  2. vi编辑器设置行号可见
  3. html5--6-11 CSS选择器7--伪类选择器
  4. ORACLE 创建表空间及用户
  5. cassandra cpp driver中bind list——用cass_statement_bind_collection函数
  6. RandomUtils
  7. bzoj 1657 Mooo 奶牛的歌声 —— 单调栈
  8. 更改ssh远程登录端口.sh
  9. Win7系统打开服务管理界面的几种方法汇总
  10. django上课笔记6-MVC,MTV架构-中间件-初识Form组件