设计模式-迭代器模式

迭代器模式,提供一种方法顺序访问一个聚合对象中各个元素,而不暴露该对象的内部表示。该模式很好理解,C++中的迭代器应该都用过,和那个差不多。
迭代器模式的UML类图:
在这里插入图片描述
1.迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口。
2.具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置。
3.集合角色(Aggregate):集合角色负责提供创建具体迭代器角色的接口。
4.具体集合角色(Concrete Aggregate):具体集合角色实现创建具体迭代器角色的接口——这个具体迭代器角色于该集合的结构相关

#include <iostream>
using namespace std;
// 迭代器
class IteratorBase
{
public:
    virtual void first() = 0;
    virtual void next() = 0;
    virtual bool isDone() = 0;
    virtual int currentItem() = 0;
};

class Aggregate
{
protected:
    int a[10];
public:
    virtual IteratorBase* CreateIter()=0;
    virtual int getIt(int index)=0;
    virtual int getSize()=0;

};
class MyIterator : public IteratorBase
{
public:
    MyIterator(Aggregate *A){
        ag=A;

    }

public:
    virtual void first() {
        index=0;
    }
    virtual void next(){
        index++;
    }
    virtual bool isDone(){
        return (index==ag->getSize());
    }
    virtual int currentItem() {
        return ag->getIt(index);
    }

private:
    int index;
    Aggregate *ag;
};
class AggregateA :public Aggregate{
public:
    virtual IteratorBase* CreateIter(){
        return new MyIterator(this);
    }
    virtual int getIt(int index){
        return a[index];
    }
    virtual int getSize(){
        return 10;
    }
};
 int main(){
     Aggregate *ag =new AggregateA();
     IteratorBase * it=ag->CreateIter();
     for (it->first();!(it->isDone());it->next()){
         cout<<it->currentItem()<<" ";
     }
     return 0;
 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值