目录
迭代器模式(Iterator Pattern)是一种【行为型】设计模式,它提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。这种模式将遍历逻辑封装在迭代器对象中,使客户端可以统一使用迭代器来访问不同类型的聚合对象,无需关心对象的具体实现。
一、模式核心概念与结构
迭代器模式包含四个核心角色:
- 迭代器接口(Iterator):定义访问和遍历元素的接口,如
next()
、hasNext()
等方法。 - 具体迭代器(Concrete Iterator):实现迭代器接口,跟踪聚合对象中的当前位置。
- 聚合接口(Aggregate):定义创建迭代器对象的接口,如
createIterator()
方法。 - 具体聚合(Concrete Aggregate):实现聚合接口,创建与之对应的具体迭代器。
二、C++ 实现示例:自定义集合迭代器
以下是一个简单的迭代器模式示例,演示如何为自定义集合实现迭代器:
#include <iostream>
#include <memory>
#include <vector>
// 前向声明
template <typename T> class Iterator;
template <typename T> class ConcreteAggregate;
// 迭代器接口
template <typename T>
class Iterator {
public:
virtual ~Iterator() = default;
virtual bool hasNext() const = 0;
virtual T next() = 0;
};
// 聚合接口
template <typename T>
class Aggregate {
public:
virtual ~Aggregate() = default;
virtual std::shared_ptr<Iterator<T>> createIterator() = 0;
};
// 具体迭代器
template <typename T>
class ConcreteIterator : public Iterator<T> {
private:
std::shared_ptr<std::vector<T>> collection;
size_t position;
public:
ConcreteIterator(std::shared_ptr<std::vector<T>> coll)
: collection(coll), position(0) {
}
bool hasNext() const override {
return position < collection->size();
}
T next() override {
if (hasNext(