迭代子模式
迭代子模式是一种行为设计模式,用于提供一种方法顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示。迭代子模式将遍历操作封装在迭代子对象中,客户端可以通过迭代子对象逐个访问聚合对象中的元素,而不需要了解聚合对象的内部结构。
使用场景:
1、当需要以统一的方式遍历不同类型的集合对象时,可以使用迭代子模式。
2、当需要隐藏集合对象的内部结构,提供统一的遍历接口时,可以使用迭代子模式。
3、当需要支持多种遍历方式(如正向遍历、逆向遍历、跳跃遍历等)时,可以使用迭代子模式。
优势:
1、将遍历集合对象的行为封装在迭代子对象中,使得客户端可以方便地遍历集合对象,而不用关心集合对象的内部结构。
2、支持多种遍历方式,客户端可以根据需要选择不同的迭代子进行遍历。
3、可以简化集合对象的接口,提高代码的灵活性和可维护性。
劣势:
1、增加了对象的数量,可能会增加系统复杂性。
2、如果集合对象的结构发生变化,可能需要同时修改迭代子对象,维护成本较高。
Code
#include <iostream>
#include <vector>
// 迭代子接口
class Iterator {
public:
virtual bool hasNext() = 0;
virtual int next() = 0;
};
// 具体迭代子实现
class ConcreteIterator : public Iterator {
private:
std::vector<int> data;
size_t index;
public:
ConcreteIterator(const std::vector<int>& inputData) : data(inputData), index(0) {}
bool hasNext() override {
return index < data.size();
}
int next() override {
return data[index++];
}
};
// 聚合对象
class Aggregate {
private:
std::vector<int> data;
public:
void add(int value) {
data.push_back(value);
}
Iterator* createIterator() {
return new ConcreteIterator(data);
}
};
int main() {
Aggregate aggregate;
aggregate.add(1);
aggregate.add(2);
aggregate.add(3);
Iterator* iterator = aggregate.createIterator();
while (iterator->hasNext()) {
std::cout << iterator->next() << " ";
}
std::cout << std::endl;
delete iterator;
while (1);
return 0;
}