php 设计模式之 迭代器(Iterator)



1. 迭代器模式

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


2. 实列

interface MsgIterator {
    public function First();    // 返回第一个元素
    public function Next();    // 返回下一个元素
    public function IsDone();    // 检查当前位置是否有效
    public function Current();    // 返回当前元素
}

class MsgIterator implements MsgIterator {    // 迭代器类
    private $list;    // 数组
    private $index;    // 键
    public function __construct($list) {
        $this->list = $list;
        $this->index = 0;
    }
    public function First() {     // 返回第一个元素
        $this->index = 0;
    }

    public function Next() {     // 返回下一个元素
        $this->index++;
    }

    public function IsDone() {    // 检查当前位置是否有效
     return isset($this -> list[$this -> index]);
    }

    public function Current() {    // 返回当前元素
        return $this->list[$this->index];
    }
}

interface Message {
    public function CreateIterator($list);
}

class MessageAsc implements Message {    // 执行类
    public function CreateIterator($list) {
        return new MsgIterator($list);
    }
}

// 要发的短信号码列表
$mobileList = [
    '13111111111',
    '13111111112',
    '13111111113',
];

$serverA = new MessageAsc();
$iteratorA = $serverA->CreateIterator($mobileList);

while (!$iteratorA->IsDone()) {
    echo $iteratorA->CurrentItem(), PHP_EOL;
    $iteratorA->Next();
}

3. 使用场景

  1. 访问聚合对象,不需要关注内部数据结构
  2. 斐波纳契数列
posted @ 2020-12-29 16:16  linsonga  阅读(114)  评论(0)    收藏  举报