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

设计模式-迭代器模式-笔记

动机(Motivaton)

在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们呢希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“同一种算法在多种集合对象上进行操作”提供了可能。

使用面向对象技术将这种遍历机制抽象为“迭代器对象”为“应对变化中集合对象”提供一种优雅的方式。

模式定义:

提供一种方法顺序访问一个集合对象中的各个元素,而又不暴露(稳定)该对象内部表示。

#include <iostream>template<typename T>
class Iterator {
public:virtual void first() = 0;virtual void next() = 0;virtual bool isDone() = 0;virtual T& current() = 0;
};template<typename T>
class MyCollection {
public:Iterator<T>* GetIterator() {//...}
};template<typename T>
class CollentionIterator : public Iterator<T> {MyCollection<T> mc;
public:CollentionIterator(const MyCollection<T>& c) : mc(c) {}void first() override {//...}void next() override {//...}void isDone() override {//...}T& current() override {//...}
};int main() {MyCollection<int> mc;Iterator<int>* iter = mc.GetIterator();for (iter->first(); !iter->isDone(); iter->next()) {std::cout << iter->current() << std::endl;}
}

要点总结:

迭代抽象:访问一个集合对象的内容而无需暴露他的内部表示;

迭代多态:为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的结构上进行操作;

迭代器的健壮性考虑:遍历的同时更改迭代器所在集合机构,会导致问题。

http://www.lryc.cn/news/237223.html

相关文章:

  • 【数据结构】C语言实现队列
  • 牛客——OR36 链表的回文结构(C语言,配图,快慢指针)
  • Docker build 技巧 —— 筑梦之路
  • 2 Redis的高级数据结构
  • Hive默认分割符、存储格式与数据压缩
  • update_engine-FilesystemVerifierAction和PostinstallRunnerAction
  • 深度学习乳腺癌分类 计算机竞赛
  • 【Python百宝箱】掌握Python Web开发三剑客:Flask、Django、FastAPI一网打尽
  • 【人工智能时代的刑法体系与责任主体概述】
  • 透视maven打包编译正常,intellj idea编译失败问题的本质
  • npm报错
  • 【FFmpeg实战】ffmpeg播放器-音视频解码流程
  • 基于SSM的高校毕业选题管理系统设计与实现
  • 一个简单的Oracle Redaction实验
  • getchar函数的功能有哪些
  • 信息机房监控系统(动环辅助监控系统)
  • 最强英文开源模型Llama2架构与技术细节探秘
  • 编程刷题网站以及实用型网站推荐
  • 基于STC12C5A60S2系列1T 8051单片机的SPI总线器件数模芯片TLC5615实现数模转换应用
  • 【并发编程】Synchronized的使用
  • 【Python】Python基础
  • gitlab环境准备
  • Apache Doris (五十四): Doris Join类型 - Bucket Shuffle Join
  • 【AI】行业消息精选和分析(23-11-20)
  • Matplotlib实现Label及Title都在下方的最佳姿势
  • 使用 uWSGI 部署 Django 应用详解
  • MyBatis在注解中使用动态查询
  • 百云齐鲁 | 云轴科技ZStack成功实践精选(山东)
  • 【Electron】electron-builder打包失败问题记录
  • OpenCV快速入门:直方图、掩膜、模板匹配和霍夫检测