一天一个设计模式(14)——迭代器模式

在面向对象程序设计中,迭代器模式是一种设计模式,其中迭代器用于遍历容器并访问容器的元素。迭代器模式将算法与容器解耦; 在某些情况下,算法是特定容器必需的,因此不能解耦。

复制代码
<?php

class RadioStation
{
    private $_frequency;

    public function __construct(float $frequency)
    {
        $this->_frequency = $frequency;
    }

    public function getFrequency(): float
    {
        return $this->_frequency;
    }
}

class StationList implements Countable, Iterator
{

    private $_stations = [];
    private $_counter;

    public function addStation(RadioStation $station)
    {
        $this->_stations[] = $station;
    }

    public function removeStation(RadioStation $station)
    {
        $key=array_search($station,$this->_stations);
        array_splice($this->_stations,$key,1);
    }

    public function count(): int
    {
        return count($this->_stations);
    }

    public function current()
    {
        return $this->_stations[$this->_counter];
    }

    public function next()
    {
        $this->_counter++;
    }

    public function key()
    {
        return $this->_counter;
    }

    public function valid()
    {
        return isset($this->_stations[$this->_counter]);
    }

    public function rewind()
    {
        $this->_counter = 0;
    }

}

$stationList=new StationList();
$stationList->addStation(new RadioStation(88));
$stationList->addStation(new RadioStation(89));
$stationList->addStation(new RadioStation(90));
$stationList->addStation(new RadioStation(91));
$stationList->removeStation(new RadioStation(89));
foreach ($stationList as $station){
    echo $station->getFrequency().PHP_EOL;
}
复制代码

 

posted @   Bin_x  阅读(243)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示