C 設計模式 迭代器模式

2021-06-18 14:56:13 字數 1835 閱讀 5821

迭代器模式(iterator):提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露該物件的內部表示。

迭代器模式結構圖:

iterator迭代器抽象類:

class iterator

public:

virtual  object&  first()=0;

virtual  object&  next()=0;

virtual  bool   isdone()=0;

virtual  object&  currentitem()=0;

//用於定義得到開始物件,得到下乙個物件、判斷是否到結尾、當前物件等抽象方法,統一介面

aggregate聚集抽象類:

class aggregate

public:

virtual  iterator*  createiterator()=0;   //建立迭代器

concreteiterator具體迭代器類,繼承iterator

class concreteiterator :public  iterator

private:

concreteaggregate  * aggregate;

list::iteratorit;

public:

concreteiterator(concreteaggregate  * aggregate)

this->aggregate = aggregate;

it=aggregate->begin();

object&  first()

return *it;

object&  next()

object ret = null;

if((++it)!=aggregate->end())

ret = *it;

return ret;   

bool  isdone()

if((++it)!=aggregate->end())

return  false;

else

return  true;

object&  currentitem()

return *it;

concreteaggregate具體聚集類,繼承aggregate

class concreteaggregate :public  aggregate

private:

list*items = new list();

public:

iterator*  createiterator()

return  new  concreteiterator(concreteaggregate *paggregate=this);

void  setobject(object  obj)

items->push_back(obj);

客戶端**:

void  main()

concreteaggregate  *pa = newconcreteaggregate();

pa->setobject(「元素1」);

pa->setobject(「元素2」);

pa->setobject(「元素3」);

pa->setobject(「元素4」);

iterator * it = pa->createiteraor(pa);

cout

while(!it->isdone())

coutnext();

C 設計模式 迭代器模式

迭代器模式 提供一種方法順序訪問乙個聚合物件中的各個元素,而又不暴露其內部的結構 每一種資料結構 包括自定義 遍歷自身內部的資料方式都是不同的。但是我們又希望和常規的遍歷方式一樣呼叫,就如for和foreach一樣遍歷。想要以相同的方式遍歷不同型別的聚合物件,首先就要有乙個相同的介面方法來統一獲取,...

設計模式 C 迭代器模式

sejimoshi.cpp 此檔案包含 main 函式。程式執行將在此處開始並結束。include include include using namespace std class student long getid intgetage void setname string name void...

C 設計模式 迭代器模式

迭代器模式 iterator 提供了一種順序訪問乙個聚合物件中各個元素,而又不暴露該物件的內部表示。因此,當你需要訪問乙個聚焦物件,而且不管這些物件是什麼都需要遍歷的時候,就應該選擇使用迭代器模式,為了遍歷不同的聚合結構提供了如開始,下乙個,是否結束,當前哪一項等統一的介面。迭代抽象類,用於定義得到...