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

【设计模式】迭代器模式

概念

行为模式


类图

Iterator


代码

#include <iostream>
#include <vector>using namespace std;class Profile {
public:Profile (int index, string email) {id = index;content = email;}void GetId() {cout << "Id get! " << id << endl;}void GetEmail() {cout << "Email get! " << content << endl;}private:int id;string content;
};class ProfileIterator {
public:virtual ~ProfileIterator() = default;virtual Profile* GetNext() = 0;virtual bool HasMore() = 0;
};class SocialNetwork {
public:virtual ProfileIterator* CreateFriendsIterator(int profileId) = 0;virtual ProfileIterator* CreateCoworkersIterator(int profileId) = 0;
};class WeChat;
class WeChatIterator : public ProfileIterator {
public:WeChatIterator(WeChat* weChat, int profileId, const string& type) {this->weChat = weChat;this->profileId = profileId;this->type = type;};Profile* GetNext() override {if (HasMore()) {currentPosition++;return profiles[currentPosition - 1];}return nullptr;}bool HasMore() override {LazyInit();return currentPosition < profiles.size();}private:WeChat* weChat;int profileId;string type;int currentPosition{0};vector<Profile*> profiles;void LazyInit() {if (profiles.empty()) {cout << "WeChatIterator lazy init." << endl;profiles.emplace_back(new Profile(profileId, type));}}
};class WeChat : public SocialNetwork {
public:ProfileIterator* CreateFriendsIterator(int profileId) override {return new WeChatIterator(this, profileId, "friends");}ProfileIterator* CreateCoworkersIterator(int profileId) override {return new WeChatIterator(this, profileId, "coworkers");}
};class SocialSpammer {
public:static void Send(ProfileIterator* iterator, const string& message) {while (iterator->HasMore()) {auto profile = iterator->GetNext();profile->GetId();profile->GetEmail();}}
};int main(int argc, char *argv[]) {auto network = new WeChat();auto coworkerIter = network->CreateCoworkersIterator(0);auto friendIter = network->CreateFriendsIterator(1);SocialSpammer::Send(coworkerIter, "VIP MSG!");SocialSpammer::Send(friendIter, "JUNK MSG!");delete network;delete coworkerIter;delete friendIter;return 0;
}
http://www.dtcms.com/a/394482.html

相关文章:

  • 【论文速递】2025年第25周(Jun-15-21)(Robotics/Embodied AI/LLM)
  • 串口通信介绍
  • 2025windows系统40系英伟达GPU显卡Pytorch环境配置(base:py3.8)
  • 第15章 报警管理
  • Java并发安全解析
  • 三次样条曲线速度规划方法介绍
  • 重拓扑建模之陶瓷摆件的诞生
  • 计算机视觉数据预处理核心:空间变化与归一化的深度解析与实战指南
  • PCIe 8.0协议规范0.3版本发布!
  • 【Leetcode hot 100】199.二叉树的右视图
  • Product Hunt 每日热榜 | 2025-09-21
  • CMake进阶教程:库文件构建、发布及列表操作技巧
  • 因果推断DAGs和控制变量:如何使用有向无环图选择因果推断的控制变量
  • Nginx优化全攻略(上):基础配置优化!
  • 七、Scala 包、样例类与样例对象
  • CSP - 2025 普及组初赛试题及解析
  • Matlab实现点云的体素下采样
  • 淘宝 item_search_img(拍立淘)API 接口获取与应用指南
  • Python网络请求库requests使用详述
  • B站 弹幕 相关工具
  • 23 webUI应用基础案例-线稿上色
  • 【MicroPython编程】-深入了解MicroPython 的垃圾收集
  • STM32F429I-DISC1【板载LED呼吸灯】
  • OBOO鸥柏工业触摸屏:信创国产化芯片驱动,展现军工级卓越性能
  • Ubantu命令行指令大全
  • 字节面试题:正则化技术如何影响网络梯度
  • Java进阶教程,全面剖析Java多线程编程,死锁,笔记15
  • 【含文档+PPT+源码】基于SpringBoot+Vue的车牌识别实时交通流量统计系统
  • C++动态规划4
  • chmod命令