您好,欢迎访问一九零五行业门户网

C++设计模式浅识迭代器模式

迭代器模式:提供一中方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。【dp】
四个角色:
iterator迭代器抽象类: 用于定义得到开始对象,得到下一个对象、判断是否到结尾、当前对象等抽象方法,统一接口。
concreteiterator具体迭代器类: 继承iterator,实现具体开始对象、下一个对象等方法。
aggregate聚集抽象类: 创建迭代器
concreteaggregate具体聚集类
适用场合:
当你需要访问一个聚集对象,而且不管这些对象是什么,只需要遍历的时候。
需要对聚集有多种方式遍历时,如从前至后或从后至前。
为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪一项等统一的结构。
测试用例:
[code]int main(){ concreteaggregate pa; pa.add("bigbird"); pa.add("pickles"); pa.add("luggage"); pa.add("foreigners"); pa.add("innerstaff"); pa.add("thief"); concreteiterator itr(pa); string temp = itr.first(); while (!itr.isdone()) { std::cout << itr.currentitem() << ", ticket, please\n"; itr.next(); } return 0; }
迭代器模式实现:
[code]//迭代器模式 #include <iostream> #include <deque> #include <string> using std::string; using std::deque; //myiterator迭代器抽象类 class myiterator{ public: myiterator(){} //得到开始对象 virtual string first() = 0; //得到下一个对象 virtual string next() = 0; //判断是否到结尾 virtual bool isdone() = 0; //当前对象 virtual string currentitem() = 0; }; //抽象聚集类 class aggregate{ public: aggregate(){} //创建迭代器 virtual myiterator* createiterator() = 0; private: friend class myiterator; }; //具体聚集类 class concreteaggregate: public aggregate{ public: myiterator* createiterator(); int count(); void add(string st); string this(int index); private: friend class concreteiterator; //乘客队列 deque<string> passengers; }; //具体的迭代器类 class concreteiterator: public myiterator{ public: concreteiterator(concreteaggregate); string first(); string next(); bool isdone(); string currentitem(); private: //以具体的聚集类为友元类 friend class concreteaggregate; concreteaggregate aggregate; int current = 0; }; //方法实现 //具体迭代器类 concreteiterator::concreteiterator(concreteaggregate cagg): aggregate(cagg), current(cagg.passengers.size() - 1){ } string concreteiterator::first(){ return aggregate.this(0); } string concreteiterator::next(){ string temp; --current; if(current >= 0) temp = aggregate.this(current); return temp; } string concreteiterator::currentitem(){ return aggregate.this(current); } bool concreteiterator::isdone(){ return current >= 0 ? false : true; } //方法实现 //具体聚集类 myiterator* concreteaggregate::createiterator(){ return (new concreteiterator(*this)); } int concreteaggregate::count(){ return passengers.size(); } void concreteaggregate::add(string st){ passengers.push_back(st); } string concreteaggregate::this(int index){ return passengers.at(index); }
总结:迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合内部结构,又可让外部代码透明地访问集合内部的数据。
以上就是c++设计模式浅识迭代器模式的内容。
其它类似信息

推荐信息