声明:这一系列的博客引用《大话设计模式》。程洁作者。

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

UML类图:

角色:

Iterator(迭代器):迭代器定义訪问和遍历元素的接口

ConcreteIterator(详细迭代器):详细迭代器实现迭代器接口,对该聚合遍历时跟踪当前位置

Aggregate (聚合):聚合定义创建对应迭代器对象的接口(可选)

ConcreteAggregate(详细聚合):详细聚合实现创建对应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例(可选)

核心代码:

<?

php
/**
* Created by PhpStorm.
* User: Jiang
* Date: 2015/6/8
* Time: 21:31
*/ //抽象迭代器
abstract class IIterator
{
public abstract function First();
public abstract function Next();
public abstract function IsDone();
public abstract function CurrentItem();
} //详细迭代器
class ConcreteIterator extends IIterator
{
private $aggre;
private $current = 0;
public function __construct(array $_aggre)
{
$this->aggre = $_aggre;
}
//返回第一个
public function First()
{
return $this->aggre[0];
} //返回下一个
public function Next()
{
$this->current++;
if($this->current<count($this->aggre))
{
return $this->aggre[$this->current];
}
return false;
} //返回是否IsDone
public function IsDone()
{
return $this->current>=count($this->aggre)? true:false;
} //返回当前聚集对象
public function CurrentItem()
{
return $this->aggre[$this->current];
}
}

调用client測试代码:

header("Content-Type:text/html;charset=utf-8");
//--------------------------迭代器模式-------------------
require_once "./Iterator/Iterator.php";
$iterator= new ConcreteIterator(array('周杰伦','王菲','周润发'));
$item = $iterator->First();
echo $item."<br/>";
while(!$iterator->IsDone())
{
echo "{$iterator->CurrentItem()}:请买票。<br/>";
$iterator->Next();
}

使用场景:

1.訪问一个聚合对象的内容而无需暴露它的内部表示

2.支持对聚合对象的多种遍历

3.为遍历不同的聚合结构提供一个统一的接口

欢迎关注我的视频课程。地址例如以下。谢谢。

PHP面向对象设计模式

版权声明:本文博主原创文章,博客,未经同意不得转载。

最新文章

  1. 前端构建大法 Gulp 系列 (四):gulp实战
  2. c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥
  3. 【BZOJ 3051】【UOJ #57】【WC 2013】平面图
  4. 挂FORM时找不到对应的功能(function)
  5. ISAPI_Rewrite中文手册
  6. redis Ok2
  7. java基础篇---I/O技术
  8. (转载)Java NIO:NIO概述(一)
  9. Oracle排序
  10. app性能测试【通过loadrunner录制】
  11. .Net+SQL Server企业应用性能优化笔记—精确查找瓶颈
  12. localStorage学习总结
  13. js html标签select 中option 删除除了第一行外的其他行
  14. FIFO队列算法的C程序实现
  15. AltiumDesigner印制导线的走向及形状
  16. 使用Android拨打电话功能
  17. Jmeter之目录结构
  18. 使用GridFsTemplate在Mongo中存取文件
  19. nginx反向代理后abp的webapi host如何获取客户端ip?
  20. centos6.9下安装python3.7

热门文章

  1. HibernateCRUD基础框架(2)-HQL语句构造器(HqlQueryBuilder,HqlUpdateBuilder)
  2. 100万并发连接服务器笔记之Java Netty处理1M连接会怎么样
  3. usart和uart 的区别
  4. 23、V4L2应用编写及各个ioctl涉及结构体说明分析
  5. openCV 和GDI画线效率对比
  6. php替换空格(php函数的设计思路)
  7. Pandoc —— 标记语言转换工具(中文乱码问题)
  8. IIS服务器能支持10万并发
  9. bootstrap如何把表单select input button弄在一行
  10. [Node.js] Test Node RESTful API with Mocha and Chai