《迭代器模式(极简c++)》

        本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客


模式说明

  • 方案: 迭代器模式是一种行为型设计模式,它提供了一种方法来顺序访问一个容器对象中的各个元素,而不暴露该对象的内部表示。该模式通过引入迭代器对象来封装访问顺序,并让容器对象可以独立于其遍历算法进行变化。
  • 优点:
    • 将遍历算法和容器对象解耦,使得容器可以自由变化而不影响遍历操作。
    • 简化了容器的接口,使得容器只需关注自身的数据结构和操作。
  • 缺点:
    • 增加了迭代器对象的额外开销。
    • 对于某些简单的容器,引入迭代器模式可能会显得过于复杂。

本质思想:将对容器的遍历操作封装到迭代器对象中,使得遍历操作可以独立于容器实现。这样,容器可以改变其内部结构而不影响遍历操作。

实践建议:c++以及大部分语言中,都有自己封装好的第三方迭代器。如std::vector,业务代码一般不需要单独封装,而是把基类指针放到容器中,就可以实现去除实现细节的遍历。

代码示例

#include <iostream>
#include <vector>

// 迭代器接口
class Iterator {
public:
    virtual int next() = 0;
    virtual bool hasNext() = 0;
};

// 容器接口
class Container {
public:
    virtual Iterator* getIterator() = 0;
    virtual void add(int element) = 0;
};

// 具体迭代器
class ConcreteIterator : public Iterator {
private:
    std::vector<int>& data;
    size_t index;

public:
    ConcreteIterator(std::vector<int>& container) : data(container), index(0) {}

    int next() override {
        return data[index++];
    }

    bool hasNext() override {
        return index < data.size();
    }
};

// 具体容器
class ConcreteContainer : public Container {
private:
    std::vector<int> data;

public:
    Iterator* getIterator() override {
        return new ConcreteIterator(data);
    }

    void add(int element) override {
        data.push_back(element);
    }
};

int main() {
    ConcreteContainer container;
    container.add(1);
    container.add(2);
    container.add(3);

    Iterator* it = container.getIterator();
    while (it->hasNext()) {
        std::cout << it->next() << " ";
    }
    std::cout << std::endl;

    delete it;
    return 0;
}

/*
Output:
1 2 3
*/

相关推荐

  1. 模式c++)》

    2024-04-04 06:20:03       17 阅读
  2. 《装饰模式c++)》

    2024-04-04 06:20:03       17 阅读
  3. 《解释模式c++)》

    2024-04-04 06:20:03       15 阅读
  4. 模式-C++实现

    2024-04-04 06:20:03       36 阅读
  5. 模式-C#实现

    2024-04-04 06:20:03       32 阅读
  6. ·模式

    2024-04-04 06:20:03       30 阅读
  7. 模式

    2024-04-04 06:20:03       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-04 06:20:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-04 06:20:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-04 06:20:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-04 06:20:03       20 阅读

热门阅读

  1. 常见网络问题的概述

    2024-04-04 06:20:03       10 阅读
  2. 通过TCP或UDP向某个IP和端口发送数据

    2024-04-04 06:20:03       13 阅读
  3. 新兴AI技术及其创业机会

    2024-04-04 06:20:03       17 阅读
  4. 【开源产品部署系列】一、RuoYi-Radius搭建流程

    2024-04-04 06:20:03       14 阅读
  5. Pytorch torch.utils.data.DataLoader 用法详细介绍

    2024-04-04 06:20:03       16 阅读
  6. Ubuntu 如何移动硬盘在所有账号都分享

    2024-04-04 06:20:03       14 阅读
  7. C/C++混合项目,程序运行报错:未定义函数符号

    2024-04-04 06:20:03       11 阅读
  8. HTML优化SEO的实用技巧

    2024-04-04 06:20:03       17 阅读
  9. 大话设计模式之组合模式

    2024-04-04 06:20:03       13 阅读
  10. 我的创作纪念日

    2024-04-04 06:20:03       17 阅读