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

动机(Motivaton)

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

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

模式定义:

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

cpp 复制代码
#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;
    }
}

要点总结:

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

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

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

相关推荐
a1117761 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
破碎的南瓜3 小时前
sqli--sql注入过关笔记(1,2,3,4,5,9)
数据库·笔记·sql
你想知道什么?3 小时前
线性回归-学习笔记
笔记·学习·线性回归
谙弆悕博士3 小时前
系统集成项目管理工程师教程(第3版)笔记——第17章:法律法规和标准规范
笔记·职场和发展·学习方法·业界资讯·软考·法律·法规
杨充4 小时前
11.DDD与战术建模
设计模式·开源·代码规范
杨充4 小时前
12.综合实战图片框架
设计模式·开源·代码规范
谙弆悕博士5 小时前
系统集成项目管理工程师教程(第3版)笔记——第4章:信息系统架构
笔记·系统架构·项目管理·创业创新·学习方法·业界资讯·物理
茯苓gao6 小时前
嵌入式开发笔记:Qt信号槽机制深度解析——从原理到实战的全方位指南
开发语言·笔记·嵌入式硬件·qt·学习
A.零点8 小时前
【期末复习,408 考研计组全程笔记 】— 第4章 :指令系统
笔记·考研·408·计算机组成原理
早茶cc8 小时前
sqli1-5 9报错注入 笔记
笔记