介绍
提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。
参与者
- Iterator //迭代器
- ConcreteIterator //具体迭代器
- Aggregate //聚合
- ConcreteAggregate //具体聚合
实现代码
class Container; //聚合
class Iterator {//迭代器
public:
virtual bool hasNext() = 0;
virtual int Next() = 0;
};
class Container{
public:
Iterator *getIterator();
int size()
{
return vec.size();
}
int item(int index)
{
return vec[index];
}
void append(int item)
{
vec.push_back(item);
}
public:
std::vector<int> vec;
};
class InnerIterator : public Iterator{ //具体迭代器
public:
explicit InnerIterator(Container *container1)
{
container = container1;
index = 0;
}
bool hasNext() override
{
return index < container->size();
}
int Next() override
{
return container->item(index++);
}
private:
int index = 0;
Container *container;
};
Iterator* Container::getIterator()
{
return new InnerIterator(this);
}
int main()
{
Container container;
container.append(1);container.append(2);container.append(3);
container.append(4);container.append(9);
auto iterator = container.getIterator();
while(iterator->hasNext())
{
std::cout<<iterator->Next()<<std::endl;
}
return 0;
}
输出结果
1
2
3
4
9
特点
- 支持以不同的方式遍历同一个聚合
- 迭代器简化了聚合的接口
- 同一个聚合上可以有多个遍历
参考
- 《设计模式:可复用面向对象软件设计的基础》