设计模式—迭代器模式(十六)

来源:互联网 发布:推荐几个淘宝粘土店铺 编辑:程序博客网 时间:2024/06/06 05:05

        软件领域中的设计模式的重要性不言而喻。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态。虽然知道这些特性的定义但是并没有做到真正的理解,这样特性有什么作用?用于什么场合中等等问题,带着疑问开始学习设计模式,主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》两本书。

        迭代器模式:提供一种方法顺序访问一个聚敛对象的各个元素,而又不暴露该对象的内部表示。

        迭代器模式现在已经包含在语言中了,例如C++中的for_eachJava中的foreach in

        为遍历不同的聚集结构提供如开始,下一个,是否结束,当前一项等统一接口。


#include<iostream>#include<vector>using namespace std;class MyIterator{public:MyIterator(){};virtual ~MyIterator(){};virtual int First()=0;       // 返回集合第一个元素virtual int Next()=0;        // 返回集合下一个virtual bool IsDone()=0;     // 判断当前是不是集合尾部virtual int CurrentItem()=0; // 返回集合当前元素};class Aggregate{public:virtual MyIterator* CreatIterator()=0;//创建一个迭代器};class ConcreteAggregate :public Aggregate{private:vector<int> item;MyIterator* p_Iterator;public:ConcreteAggregate() : p_Iterator(nullptr){}MyIterator* CreatIterator();int Count(){return item.size();}void Set(int value){item.push_back(value);}int Get(int index){return item[index];}};class ConcreteIterator :public MyIterator{private:ConcreteAggregate *aggregate;int current = 0;public:ConcreteIterator(){};~ConcreteIterator(){};ConcreteIterator(ConcreteAggregate* aggregate){this->aggregate = aggregate;}int First() override{return aggregate->Get(0);}int Next() override{int temp=0;current++;if (current < aggregate->Count()){temp=aggregate->Get(current);}return temp;}bool IsDone() override{if (current >= aggregate->Count())return true;elsereturn false;}int CurrentItem() override{return aggregate->Get(current);}};MyIterator* ConcreteAggregate::CreatIterator(){p_Iterator= new ConcreteIterator(this);return p_Iterator;}int main(){ConcreteAggregate* a = new ConcreteAggregate();a->Set(0);a->Set(1);a->Set(2);a->Set(3);a->Set(4);MyIterator* p_iter = a->CreatIterator();int temp = p_iter->First();cout << temp << endl;;cout << a->Count() << endl;cout << "遍历" << endl;while (!p_iter->IsDone()){cout << p_iter->CurrentItem() << endl;p_iter->Next();}delete a;delete p_iter;return 0;}


原创粉丝点击