设计模式实现(十六)---迭代器模式(Iterator)

来源:互联网 发布:武汉人工智能创业公司 编辑:程序博客网 时间:2024/05/20 16:32

迭代器在比较高级的语言如Java,C#,C++中都已经集成进语言中,所以平时使用的并不过。学习该设计模式主要是为了学习iterator的实现原理。



迭代器模式.h

#include <vector>#include <string>using namespace std;class Object{public:string name;};//迭代器类,Iterator//用于定义得到开始对象、得到下一个对象、判断是否到结尾、当前对象等抽象方法,统一接口class Iterator{public:virtual string First() = 0;virtual string Next() = 0;virtual bool IsEnd() = 0;virtual string CurrentIterm() = 0;};//Aggregate 聚集抽象类class Aggregate{public:virtual Iterator *CreateIterator() = 0;};//具体集合类class ConcreteAggregate : public Aggregate{public:vector<string> iterms;public:Iterator *CreateIterator();int Count(){return (int)iterms.size();}string get(int index){return iterms[index];}};//ConcreteIterator 具体迭代器类,继承Iterator//不同的迭代器可以有不同迭代方式,比如从前向后,后者从后向前。需要的话可以自己在创建Iterator的子类class ConcreteIterator : public Iterator{private:ConcreteAggregate *aggregate;//定义了一个具体的聚集对象int current;public://初始化时将具体的聚集对象传入ConcreteIterator(ConcreteAggregate *aggregate){this->aggregate = aggregate;current = 0;}//得到聚集的第一个对象string First(){return aggregate->get(0);}//得到聚集的下一个对象string Next(){string ret = "";current++;if(current < aggregate->Count()){ret = aggregate->get(current);}return ret;}//判断是否结尾bool IsEnd(){return current >= aggregate->Count() ? true : false;}//返回当前聚集对象string CurrentIterm(){return aggregate->get(current);}};


迭代器模式.cpp
#include <iostream>#include "迭代器模式.h"using namespace std;//迭代器模式Iterator *ConcreteAggregate::CreateIterator(){return new ConcreteIterator(this);}int main(){ConcreteAggregate a;a.iterms.push_back("小菜");a.iterms.push_back("大鸟");a.iterms.push_back("路人甲");a.iterms.push_back("路人乙");a.iterms.push_back("路人丙");a.iterms.push_back("路人丁");Iterator *i = new ConcreteIterator(&a);string item = i->First();while(!i->IsEnd()){cout << i->CurrentIterm() <<",请买票。"<<endl;i->Next();}return 1;}


0 0
原创粉丝点击