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

来源:互联网 发布:crm软件系统ppt 编辑:程序博客网 时间:2024/06/10 12:59

迭代器模式:提供一种方法顺序访问一个聚合对象中个各个元素,而不暴露该对像的内部表示.
模式的动机:
(1)一个聚合对象,如一个列表(List)或者一个集合(Set),应该提供一种方法来让别人可以访问
它的元素,而又不需要暴露它的内部结构。
(2)针对不同的需要,可能还要以不同的方式遍历整个聚合对象,但是我们并不希望在聚合对象的
抽象层接口中充斥着各种不同遍历的操作。
(3)怎样遍历一个聚合对象,又不需要了解聚合对象的内部结构,还能够提供多种不同的遍历方式,
这就是迭代器模式所要解决的问题。

1、创建Iterator.h

#ifndef _ITERATOR_H_#define _ITERATOR_H_#include <vector>using namespace std; //使用类模板template <class Type>class Iterator{public :    virtual bool hasNext()=0;    virtual Type next()=0;};template <class Type>class ConcreteAggregate{private:    vector<Type> _object;public:      void AddObject(Type obj)      {          _object.push_back(obj);      }      Type& operator[](int index)      {          return _object[index];      }      int size()      {          return _object.size();      } };template <class Type>class AggregateIterator:public Iterator<Type>{private :    ConcreteAggregate<Type> *agg;    int _index;public :    AggregateIterator(ConcreteAggregate<Type> *agg)    {        this->agg=agg;        _index=0;    }    virtual bool hasNext()    {        return _index<agg->size()?true:false;    }    virtual Type next()    {        return (*agg)[_index++];    }};#endif

2、Client.cpp

#include <iostream>  #include "Iterator.h"using namespace std;  /* object可以是任意类型的变量 */  typedef double object;  int main()  {      ConcreteAggregate<object> *objects =new ConcreteAggregate<object>();      objects->AddObject(1.2);      objects->AddObject(2.3);      objects->AddObject(4.5);      AggregateIterator<object>  *iter = new AggregateIterator<object> (objects);      while(iter->hasNext())      {          cout<<iter->next()<<" ";    }      cout<<endl;      delete objects;      delete iter;      system("pause");      return 0;  }  
0 0
原创粉丝点击