博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Iterator模式
阅读量:4133 次
发布时间:2019-05-25

本文共 2404 字,大约阅读时间需要 8 分钟。

Iterator模式用来解决对一个聚合对象的遍历问题。

Aggregate.h

//Aggregate.h#ifndef _AGGREGATE_H_#define _AGGREGATE_H_class Iterator;typedef int Object;class Interator;class Aggregate{public:	virtual ~Aggregate();	virtual Iterator* CreateIterator() = 0;	virtual Object GetItem(int idx) = 0;	virtual int GetSize() = 0;protected:	Aggregate();private:};class ConcreteAggregate:public Aggregate{public:	enum {SIZE = 3};	ConcreteAggregate();	~ConcreteAggregate();	Iterator* CreateIterator();	Object GetItem(int idx);	int GetSize();protected:private:	Object _objs[SIZE];};#endif //~_AGGREGATE_H_
Aggregate.cpp

//Aggregate.cpp#include "Aggregate.h"#include "Iterator.h"#include 
using namespace std;Aggregate::Aggregate(){}Aggregate::~Aggregate(){}ConcreteAggregate::ConcreteAggregate(){ for (int i = 0; i < SIZE; i++) _objs[i]= i;}ConcreteAggregate::~ConcreteAggregate(){}Iterator* ConcreteAggregate::CreateIterator(){ return new ConcreteIterator(this);}Object ConcreteAggregate::GetItem(int idx){ if (idx < this->GetSize()) return _objs[idx]; else return -1;}int ConcreteAggregate::GetSize(){ return SIZE;}
Iterator.h

//Iterator.h#ifndef _ITERATOR_H_#define _ITERATOR_H_class Aggregate;typedef int Object;class Iterator{public:	virtual ~Iterator();	virtual void First() = 0;	virtual void Next() = 0;	virtual bool IsDone() = 0;	virtual Object CurrentItem() = 0;protected:	Iterator();private:};class ConcreteIterator:public Iterator{public:	ConcreteIterator(Aggregate* ag , int idx = 0);	~ConcreteIterator();	void First();	void Next();	bool IsDone();	Object CurrentItem();protected:private:	Aggregate* _ag;	int _idx;};#endif //~_ITERATOR_H_
Iterator.cpp

//Iterator.cpp#include "Iterator.h"#include "Aggregate.h"#include 
using namespace std;Iterator::Iterator(){}Iterator::~Iterator(){}ConcreteIterator::ConcreteIterator(Aggregate* ag , int idx){ this->_ag = ag; this->_idx= idx;}ConcreteIterator::~ConcreteIterator(){}Object ConcreteIterator::CurrentItem(){ return _ag->GetItem(_idx);}void ConcreteIterator::First(){ _idx = 0;}void ConcreteIterator::Next(){ if (_idx < _ag->GetSize()) _idx++;}bool ConcreteIterator::IsDone(){ return (_idx == _ag->GetSize());}
main.cpp

#include "Aggregate.h"#include "Iterator.h"#include 
using namespace std;int main(){ Aggregate* ag = new ConcreteAggregate(); Iterator* it = new ConcreteIterator(ag); for (; !(it->IsDone()) ; it->Next()) { cout<
CurrentItem()<

转载地址:http://vjvvi.baihongyu.com/

你可能感兴趣的文章