一、簡介
1. 定義
提供一種方法順序訪問乙個聚合物件中各個元素,而又不需要暴露該物件的內部表示。
2. 應用場景
1)訪問乙個聚合物件的內容而無需暴露它的內部表示;
2)提供對聚合物件的多種遍歷;
3)為遍歷不同的聚合結構提供乙個統一的介面,即支援多型迭代。
3. 優點
1)簡化了類的聚合介面;
2)封裝了物件的內部資料,降低耦合;
3)應用廣泛,現在很多的庫都提供了迭代功能,不需要程式設計師再重複造輪子。
4. 缺點
1)由於實現**較為複雜,不太適應於簡單的資料結構物件。
二、類圖
iterator:定義迭代器訪問和遍歷元素的介面;
concreteiterator:實現具體的迭代器;
aggregate:定義的容器,建立相應迭代器物件的介面;
concreteaggregate:具體的容器實現建立相應迭代器的介面,該操作返回concreteiterator的乙個適當的例項。
三、**示例
#ifndef iterator_h#define iterator_h#include
#include
#include
using
namespace
std;
class
iterator
;
virtual ~iterator() {};
virtual qstring first() = 0
;
virtual qstring next() = 0
;
virtual qstring getcur() = 0
;
virtual
bool isend() = 0;};
class
aggregate
;
virtual ~aggregate() {};
virtual
int count() = 0
;
virtual
void push(const qstring& strvalue) = 0
;
virtual qstring pop(int nindex) = 0
;
virtual iterator* createiterator() = 0;};
class bookiterator : public
iterator
qstring first()
qstring next()
return
strret;
}qstring getcur()
bool
isend()
private
: aggregate*m_aggregate;
intm_ncurrent;
};class bookcase : public
aggregate
~bookcase()
}iterator*createiterator()
return
m_piterator;
}intcount()
void push(const qstring&strvalue)
qstring pop(
intnindex)
return
bookstr;
}private
: qvector
m_bookvec;
iterator *m_piterator;
};#if 1
#define free_obj(obj) if (nullptr != (obj))
void
main()
}free_obj(bookcase);
}#endif//1
#endif
//!iterator_h
迭代器模式
迭代器模式 iterator 提供一種方法順序訪問乙個聚合物件中各個元素,而不是暴露該物件的內部表示。乙個聚集物件,而且不管這些物件是什麼都需要遍歷的時候,你就應該考慮用迭代器模式。你需要對聚集有多種方式遍歷時,可以考慮用迭代器模式。為遍歷不同的聚集結構提供如開始,下乙個,是否結束,當前哪一項等統一...
迭代器模式
我最早接觸的設計模式就是迭代器模式了哈 為什麼要有迭代器模式呢?看下下面的 就知道了哈 對於乙個陣列物件sz 我們要怎麼遍歷呢?public void bianlisz class geweishu public myiterator getiterator private class geweis...
迭代器模式
迭代器模式 提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露該物件多的內部表示。1 iterator抽象類 public abstract class iterator 2 aggregate聚集抽象類 public abstract class aggregate 3 concreteite...