迭代器模式

2021-10-03 13:41:58 字數 2237 閱讀 8389

一、簡介

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...