c++設計模式之迭代器模式

迭代器模式提供了一種方法順序訪問一個聚合對象中的各個元素, 而又不暴露其內部的表示

迭代器模式將元素之間的遊走的責任交給迭代器, 而不是聚合對象, 讓聚合的接口和實現更簡潔




#ifndef Iterator_h
#define Iterator_h

#include <vector>
using std::vector;

template <typename T>
class Iterator
{
public:
	virtual bool hasNext() = 0;
	virtual T *next() = 0;
};

template <typename T>
class Aggregate
{
public:
	virtual Iterator<T> *createIterator() = 0;
};

template <typename T>
class ConcreteIterator : public Iterator<T>
{
public:
	ConcreteIterator(std::vector<T> all) : allItems(all), position(0) { }
	virtual bool hasNext()
	{
		if (position < allItems.size())
		{
			return true;
		}
		return false;
	}
	virtual T *next()
	{
		return &allItems[position++];
	}
private:
	std::vector<T> allItems;
	int position;
};

template <typename T>
class ConcreteAggregate : public Aggregate<T>
{
public:
	ConcreteAggregate()
	{
		allItems.push_back(1);
		allItems.push_back(2);
		allItems.push_back(3);
	}
	virtual Iterator<T> *createIterator()
	{
		return new ConcreteIterator<T>(allItems);
	}
private:
	std::vector<T> allItems;
};

#endif

測試


#include <iostream>

#include "Iterator.h"

int main(int argc, char **argv)
{
	ConcreteAggregate<int> aggregate;
	Iterator<int> *it = aggregate.createIterator();
	while (it->hasNext())
	{
		printf("%d.\n", *it->next());
	}
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章