Iterator 模式
来源:互联网 发布:爱奇艺数据怎么删除 编辑:程序博客网 时间:2024/05/22 00:27
//Aggregate.h
class Iterator;
typedefint Object;
class Interator;
class Aggregate
{
public:
virtual~Aggregate();
virtual Iterator* CreateIterator()=0;
virtual Object GetItem(int idx)=0;
virtualint GetSize()= 0;
protected:
Aggregate();
};
class ConcreteAggregate:public Aggregate
{
public:
enum {SIZE=3};
ConcreteAggregate();
~ConcreteAggregate();
Iterator* CreateIterator();
Object GetItem(int idx);
int GetSize();
private:
Object _objs[SIZE];
};
//Aggregate.cpp
#include"Aggregate.h"
#include"Iterator.h"
#include<iostream>
usingnamespace std;
Aggregate::Aggregate()
{
}
Aggregate::~Aggregate()
{
}
ConcreteAggregate::ConcreteAggregate()
{
for (int i=0; i < SIZE; i++)
_objs[i]= i;
}
ConcreteAggregate::~ConcreteAggregate()
{
}
Iterator* ConcreteAggregate::CreateIterator()
{
returnnew ConcreteIterator(this);
}
Object ConcreteAggregate::GetItem(int idx)
{
if (idx<this->GetSize())
return _objs[idx];
else
return-1;
}
int ConcreteAggregate::GetSize()
{
return SIZE;
}
//Iterator.h
class Aggregate;
typedefint Object;
class Iterator
{
public:
virtual~Iterator();
virtualvoid First()= 0;
virtualvoid Next()= 0;
virtualbool IsDone() =0;
virtual Object CurrentItem()=0;
protected:
Iterator();
};
class ConcreteIterator:public Iterator
{
public:
ConcreteIterator(Aggregate* ag ,int idx=0);
~ConcreteIterator();
void First();
void Next();
bool IsDone();
Object CurrentItem();
private:
Aggregate* _ag; int _idx;
};
//Iterator.cpp
#include"Iterator.h"
#include"Aggregate.h"
#include<iostream>
usingnamespace 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"Iterator.h"
#include"Aggregate.h"
#include<iostream>
usingnamespace std;
int main(int argc,char* argv[])
{
Aggregate* ag=new ConcreteAggregate();
Iterator* it=new ConcreteIterator(ag);
for (;!(it->IsDone()) ; it->Next())
{
cout<<it->CurrentItem()<<endl;
}
return0;
}
代码说明
Iterator模式的实现代码很简单,实际上为了更好地保护 Aggregate的状态,我们可以尽量减小Aggregate的public接口,而通过将Iterator对象声明位Aggregate的友元来给予Iterator一些特权,获得访问 Aggregate 私有数据和方法的机会。
Iterator模式的应用很常见,我们在开发中就经常会用到 STL中预定义好的 Iterator来对STL类进行遍历(Vector、Set等)。
- Iterator模式
- Iterator模式
- Iterator模式
- Iterator模式
- Iterator模式
- Iterator 模式
- Iterator模式
- Iterator模式
- Iterator模式
- Iterator 模式
- Iterator模式
- Iterator模式
- Iterator模式
- Iterator模式
- Iterator 模式
- Iterator模式
- Iterator模式
- Iterator模式
- 【Git入门之十三】Ubuntu和git
- 用vmware安装redhat 9出现“光盘无法被挂载”错误的解决办法
- 少年,你的一个Hello World 有多小?
- 浏览器小览【欢迎讨论】
- 突破安全狗的一些记录
- Iterator 模式
- 类作用域与命名空间续-----留有后续疑问
- 数据结构-算法-时间复杂度计算
- KVM几种缓存模式
- 三种工厂模式区别总结
- inside the C++ object model chapter 3 the semantics of data
- 【Git入门之十四】Git GUI
- 自己动手实现Android平台手写体数字识别之识别算法准备
- php中如何将图片储存在数据库里 详细出处参考:http://www.jb51.net/article/8733.htm