面向对象的洗礼:设计模式(二十)之迭代器模式
迭代器模式,将一个列表从头到尾或者从尾到头进行一次遍历。迭代器模式是被提名要求废除的一种设计模式。因为很多的高级语言,如PHP,Python,JAVA等,都已经拥有了foreach。迭代器模式用来访问一个列表的第一个,最后一个,或者某一个的下一个。
迭代器模式,将一个列表从头到尾或者从尾到头进行一次遍历。迭代器模式是被提名要求废除的一种设计模式。因为很多的高级语言,如PHP,Python,JAVA等,都已经拥有了foreach。
迭代器模式:提供一种方法顺序,来访问一个聚合中的各个元素,而不暴露该对象的内部表示。
迭代器模式用来访问一个列表的第一个,最后一个,或者某一个的下一个。
以PHP为代码环境模拟一下迭代器模式的思想。抽象一个Iterator类的理由是有可能是正序,有可能倒序查找。
[code]
<?php
abstract class Iterator{
public function first(){
}
public function last(){
}
}
//正序
class PositiveOrder extends Iterator{
private $list;
private $listTmp;
public function __construct($list){
$this->list = $list;
$this->listTmp = array_values($list);
}
public function first(){
return $this->listTmp[0];
}
public function last(){
return $this->listTmp[(count($this->listTmp)-1)];
}
}
//倒序
class ReverseOrder extends Iterator{
private $list;
private $listTmp;
public function __construct($list){
$this->list = $list;
$this->listTmp = array_values($list);
}
public function first(){
return $this->listTmp[(count($this->listTmp)-1)];
}
public function last(){
return $this->listTmp[0];
}
}
[/code]
我们还可以去模拟获取某个元素的下一个元素等。
在PHP中,活跃社区的各个开发者都在为PHP的明天做贡献,为我们提供了已经封装好的函数,用来操作PHP数组的内部指针。
[code]
next(); 定位指针到当前位置的后一个
prev(); 定位指针到当前位置的前一个
reset(); 重置指针到数组的开始
end(); 定位指针到数组的最后
current(); 取得当前指针位置的值
key(); 取得当前指针位置的键
[/code]
使用示例:
[code]
<?php
$arr=array("php"=>"脚本","python"=>"脚本","mysql"=>"数据库");
while(list($key,$value)=each($arr)){
echo $key.'============>'.$value.'<br>';
}
/**
* 输出结果
* php============>脚本
* python============>脚本
* mysql============>数据库
*/
reset($arr);
while(list($key,$value)=each($arr)){
echo $key.'============>'.$value.'<br>';
}
/**
* 输出结果
* php============>脚本
* python============>脚本
* mysql============>数据库
*/
reset($arr);
next($arr);
while(list($key,$value)=each($arr)){
echo $key.'============>'.$value.'<br>';
}
/**
* 输出结果
* python============>脚本
* mysql============>数据库
*/
end($arr);
echo current($arr).'=============>'.key($arr).'<br>';
/**
* 输出结果
* mysql============>数据库
*/
prev($arr);
echo current($arr).'=========>'.key($arr).'<br>';
/**
* 输出结果
* python============>脚本
*/
[/code]
点击:2814
点赞:10
点踩:8