当前位置: 首页 > news >正文

10.迭代器模式

目录

  • 一、应用场景
  • 二、通用类图
  • 三、实现
    • 3.1 类图
    • 3.2 代码实现

一、应用场景

  • 访问一个聚合对象的内容而无需暴露它的内部表示
  • 支持对聚合对象的多种遍历
  • 为遍历不同的聚合结构提供一个统一的接口(即支持多态迭代)

二、通用类图

在这里插入图片描述

  • ConcreteAggregate:具体的集合对象类
  • ConcreteIterator:迭代器对象

三、实现

3.1 类图

  • 以电视机和遥控器为场景进行设计
    在这里插入图片描述

3.2 代码实现

#include <iostream>
#include <vector>class Item;class Iterator
{
public:virtual Item* first() = 0;virtual Item* next() = 0;virtual bool isDone() = 0;virtual Item* currentItem() = 0;
};class Item
{
private:std::string name;public:Item(const std::string& name){this->name = name;}std::string getName(){return name;}
};class ITelevision
{
public:virtual Iterator* createIterator() = 0;virtual std::vector<Item*> getChannel() = 0;
};class Controller : public Iterator
{
private:unsigned int current = 0;std::vector<Item*> channel;public:Controller(std::vector<Item*> channel){this->channel = channel;}Item* first(){return channel[0];}Item* next(){current++;return channel[current];}Item* currentItem(){return channel[current];}bool isDone(){return current >= channel.size() - 1;}
};class HaierTV : public ITelevision
{
private:std::vector<Item*> channel;public:HaierTV(){channel.push_back(new Item("channel 1"));channel.push_back(new Item("channel 2"));channel.push_back(new Item("channel 3"));channel.push_back(new Item("channel 4"));channel.push_back(new Item("channel 5"));channel.push_back(new Item("channel 6"));channel.push_back(new Item("channel 7"));}std::vector<Item*> getChannel(){return channel;}Iterator* createIterator(){return new Controller(channel);}};
int main()
{ITelevision* tv = new HaierTV();Iterator* it = tv->createIterator();std::cout << it->first()->getName() << std::endl;while (!it->isDone()) {std::cout << it->next()->getName() << std::endl;}return 0;
}
http://www.dtcms.com/a/301022.html

相关文章:

  • 设计模式(二)创建型:工厂方法模式详解
  • 设计模式(十一)结构型:外观模式详解
  • rename系统调用及示例
  • docker-desktop引擎启动失败报wsl --update
  • 推荐系统学习
  • QML视图组件:ListView、GridView、TableView、PathView
  • MyBatis Plus 乐观锁与悲观锁
  • 《C++ list 完全指南:list的模拟实现》
  • NodeJs接入腾讯云存储COS
  • MySQL 用户管理
  • 第六章 JavaScript 互操(3)JS调用.NET
  • Django5.1(131)—— 表单 API二(API参考)
  • 电科金仓 KingbaseES 深度解码:技术突破・行业实践・沙龙邀约 -- 融合数据库的变革之力
  • Java面试宝典:MySQL索引
  • 2-4、Dify案例实践—基于工作流构建商城用户评价智能分析系统
  • PyTorch武侠演义 第一卷:初入江湖 第7章:矿洞中的计算禁制
  • 基于mnn架构在本地 c++运行llm与mllm模型
  • 数据结构基本内容(第四篇:队列)
  • 2025.7.27
  • Java面试题及详细答案120道之(061-080)
  • C++算法竞赛篇(六)一维数组题型讲解
  • 【工具】python汇总发票(含源码)
  • Java排序算法之<希尔排序>
  • 7月27日星期日今日早报简报微语报早读
  • GitHub 趋势日报 (2025年07月25日)
  • Linux 系统网络配置及 IP 地址相关知识汇总
  • STM32 I2C通信完整教程:从协议原理到硬件实现
  • 一文快速了解Docker和命令详解
  • 模拟实现python的sklearn库中的Bunch类以及 load_iris 功能
  • 文件权限标记机制在知识安全共享中的应用实践