迭代器模式是一种行为型设计模式,它提供了一种顺序访问聚合对象中各个元素的方法,而不需要暴露该对象的内部表示。迭代器模式可以用于实现容器类、遍历算法等应用。
下面是一个使用 C++ 实现迭代器模式的示例代码:
#include <iostream>
#include <vector>
// 迭代器抽象类
class Iterator {
public:
virtual ~Iterator() {}
virtual int Next() = 0;
virtual bool HasNext() = 0;
};
// 聚合抽象类
class Aggregate {
public:
virtual ~Aggregate() {}
virtual Iterator* CreateIterator() = 0;
};
// 具体迭代器类:向量迭代器
class VectorIterator : public Iterator {
public:
VectorIterator(std::vector<int>& vector) : vector_(vector), index_(0) {}
int Next() override {
int value = vector_[index_];
index_++;
return value;
}
bool HasNext() override {
return index_ < vector_.size();
}
private:
std::vector<int>& vector_;
int index_;
};
// 具体聚合类:向量聚合
class VectorAggregate : public Aggregate {
public:
VectorAggregate() {
for (int i = 0; i < 10; i++) {
vector_.push_back(i);
}
}
Iterator* CreateIterator() override {
return new VectorIterator(vector_);
}
private:
std::vector<int> vector_;
};
int main() {
// 创建向量聚合对象
VectorAggregate vector_aggregate;
// 创建向量迭代器对象
Iterator* iterator = vector_aggregate.CreateIterator();
// 遍历向量
while (iterator->HasNext()) {
std::cout << iterator->Next() << " ";
}
std::cout << std::endl;
// 释放迭代器对象
delete iterator;
return 0;
}
在上面的代码中,我们首先定义了一个 Iterator 抽象类,其中包含了 Next() 和 HasNext() 纯虚函数。具体迭代器类 VectorIterator 实现了 Next() 和 HasNext() 函数,以完成向量的遍历。聚合抽象类 Aggregate 定义了 CreateIterator() 纯虚函数,用于创建迭代器。具体聚合类 VectorAggregate 实现了 CreateIterator() 函数,以创建向量迭代器。
在 main() 函数中,我们首先创建了一个向量聚合对象 vector_aggregate,然后通过 CreateIterator() 函数创建了向量迭代器对象 iterator,最后遍历向量并输出结果。在结束遍历后,我们释放了迭代器对象。
迭代器模式的优点在于它将遍历算法与聚合对象分离,使得聚合对象的内部表示不会被暴露。同时,迭代器模式也提供了一种通用的遍历接口,使得遍历算法可以轻松地应用于不同的聚合对象上。但是,由于迭代器模式需要创建迭代器对象,因此它可能会增加系统的开销。