B10:迭代器模式 Iterator

Posted 罗夏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B10:迭代器模式 Iterator相关的知识,希望对你有一定的参考价值。

提供了一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示.

适用场景:
当你需要访问一个聚合对象,而这个对象不论是什么,你都需要遍历的时候,就用迭代器.

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>";
}

  

以上是关于B10:迭代器模式 Iterator的主要内容,如果未能解决你的问题,请参考以下文章

迭代器模式(Iterator Pattern)

GOF23设计模式之迭代器模式(iterator)

迭代器模式(Iterator Pattern)

设计模式之迭代器模式 Iterator

设计模式——迭代器(Iterator)模式

Iterator(迭代器)