iterator 迭代器模式

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Iterator;
typedef int Object;
class Interator;

class Aggregate
{
public:
    virtual ~Aggregate(){}
    virtual Iterator *CreateIterator() =0;
    virtual Object GetItem(int index) =0;
    virtual int GetSize() =0;
protected:
    Aggregate(){};
};

class ConcreteAggregate : public Aggregate
{
public:
    enum {SIZE = 3};
    ConcreteAggregate(){
        for (int i = 0; i < SIZE; ++i)
        {
            _obj[i] = (i + 1) * 10;
        }
    }
    ~ConcreteAggregate(){}
    Iterator *CreateIterator();
    Object GetItem(int index)
    {
        if (index < GetSize())
        {
            return _obj[index];
        }
        else
        {
            return -1;
        }
    }
    int GetSize()
    {
        return SIZE;
    }
private:
    Object _obj[SIZE];
};

class Iterator
{
public:
    virtual ~Iterator(){}
    virtual void First() =0;
    virtual void Next() =0;
    virtual bool IsDone() =0;
    virtual Object CurrentItem() =0;
protected:
    Iterator(){}
};

class ConcreteIterator : public Iterator
{
public:
    ConcreteIterator(Aggregate *ag, int index = 0):_ag(ag),_index(index){}
    ~ConcreteIterator(){}
    void First()
    {
        _index = 0;
    }
    void Next()
    {
        if (_index < _ag->GetSize())
            _index++;
    }
    bool IsDone()
    {
        return _index == _ag->GetSize();
    }
    Object CurrentItem()
    {
        return _ag->GetItem(_index);
    }
private:
    Aggregate *_ag;
    int _index;
};

Iterator *ConcreteAggregate::CreateIterator()
{
    return new ConcreteIterator(this);
}

int main()
{
    Aggregate *ag = new ConcreteAggregate();
    Iterator *it = ag->CreateIterator();
    for (;!(it->IsDone());it->Next())
    {
        cout<<it->CurrentItem()<<endl;
    }

    delete it;
    delete ag;
    return 0;
} new ConcreteIterator(ag); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值