B10:迭代器模式 Iterator
2023-09-27 14:19:41 时间
提供了一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示.
适用场景:
当你需要访问一个聚合对象,而这个对象不论是什么,你都需要遍历的时候,就用迭代器.
UML:
示例代码:
class User { private $name,$regTime,$money; public function __construct($name, $regTime) { $this->name = $name; $this->regTime = $regTime; } public function setMoney($money) { $this->money = $money; } public function __toString() { return "{$this->name} : {$this->regTime} : {$this->money}"; } } class UserIterator implements Iterator { private $users = array(); private $valid = false; public function __construct() { try{ $sql = "SELECT * FROM yx_users"; $pdo = new PDO('mysql:host=localhost;dbname=db_zuiyouxin', 'root', 'root'); $res = $pdo->query($sql); foreach ($res as $row) { $user = new User($row['name'], $row['created_at']); $user->setMoney($row['money']); $this->users[$row['id']] = $user; } $pdo = null; } catch (Exception $e) { die('Error:' . $e->getMessage()); } } public function current() { return current($this->users); } public function next() { $this->valid = (next($this->users) === false) ? false : true; } public function key() { return key($this->users); } public function valid() { return $this->valid; } public function rewind() { $this->valid = (reset($this->users) === false) ? false : true; } } $users = new UserIterator(); foreach ($users as $key => $val) { echo $key; echo $val; echo "<br>"; }
相关文章
- Java描述设计模式(17):调停者模式
- VMware仅主机模式虚拟机无法ping通物理机
- HCIE-Security Day32:IPSec:深入学习ipsec ikev1、主模式、野蛮模式、快速模式、dh算法、预共享密钥
- 设计模式java——迭代器模式
- [转]工厂模式综述
- 用最简单的例子理解迭代器模式(Iterator Pattern)
- 【Cisco Packet Tracer| 一.交换机配置模式与基本参数配置】
- ASP.NET Core Web API下事件驱动型架构的实现(五):在微服务中使用自我监听模式保证数据库更新与消息派发的可靠性
- 《JavaScript设计模式》——9.7 Prototype(原型)模式
- 迭代器模式讲解
- 设计模式之美:Behavioral Patterns(行为型模式)
- 【设计模式】简单工厂模式、工厂方法模式、抽象工厂模式
- Django:CBV模式的数据权限实现
- 微服务架构设计模式
- 23种设计模式之迭代器模式(Iterator)
- 【设计模式】行为型模式-第 3 章第 4 讲【迭代器模式】