設計模式 迭代器模式

2021-07-04 07:10:35 字數 4166 閱讀 4804

迭代器模式是屬於物件行為性的模式。首先是定義:

提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露物件的表示方法。

迭代器的結構圖:

適用性

1 訪問乙個聚合物件的內容而無需暴露它的內部表示

2 支援聚合物件的多種遍歷

3 為遍歷不同的聚合結構提供乙個統一的介面(支援多型迭代)

協作 concreteiterator跟蹤聚合中的當前物件,並能夠計算出待遍歷的後繼物件

優點 1 支援以不同的方式遍歷乙個聚合

2 迭代器簡化了聚合的介面

3 在同乙個聚合上可以有多個遍歷

實現 1 誰控制迭代

1 外部迭代:由客戶控制迭代

2 內部迭代:有迭代器控制迭代

外部迭代靈活,特別是像c++這種靜態語言(沒有提供匿名函式)

內部迭代方便使用

2 誰定義迭代演算法

由聚合本事也可提供迭代演算法,這種迭代器成為游標

由迭代器提供遍歷演算法,方便提供在同乙個聚合使用不同的遍歷演算法,但是有時遍歷演算法需要聚合的私有變數,如果這樣就會破壞聚合的封裝性

3 迭代器健壯程度如何

健壯的迭代器保證在保證插入和刪除操作的時候不會干擾遍歷和不需要拷貝該聚合

4 附加的迭代器操作

5 在c++使用多型的迭代器

6 迭代器可有特權訪問

7 用於復合物件的迭代器

8 空迭代器

它的isdone總是返回true

例子:

// iteratormodel.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include "concreteaggregate.h"

#include "concreteiterator.h"

#include

int _tmain(int argc, _tchar* argv)

return 0;

}/*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*******

@filename:iterator.h

@function: 迭代器抽象類

@author: jaime

@ver: 1.0.0

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*******/

#pragma once

#include

using namespace std;

class iterator

;/*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*******

@filename:concreteiterator.h

@function: 迭代器具體類

@author: jaime

@ver: 1.0.0

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*******/

#pragma once

#include "iterator.h"

#include "concreteaggregate.h"

class concreteiterator : public iterator

;#include "concreteiterator.h"

concreteiterator::concreteiterator(concreteaggregate* grregate)

:m_grregate(grregate)

concreteiterator::~concreteiterator()

std::string concreteiterator::first()

std::string concreteiterator::next()

return ret;

}bool concreteiterator::isdone()

std::string concreteiterator::currentitem()

/*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*******

@filename:aggregate.h

@function: 聚集抽象類

@author: jaime

@ver: 1.0.0

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*******/

#pragma once

#include "iterator.h"

class aggregate

;/*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*******

@filename:concreteaggregate.h

@function: 聚集具體類

@author: jaime

@ver: 1.0.0

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*******/

#pragma once

#include "aggregate.h"

#include

#include

using namespace std;

class concreteaggregate : public aggregate

;#include "concreteaggregate.h"

#include "concreteiterator.h"

concreteaggregate::concreteaggregate()

concreteaggregate::~concreteaggregate()

iterator* concreteaggregate::createiterator()

int concreteaggregate::count()

void concreteaggregate::push(string str)

std::string concreteaggregate::index(int i)

}

設計模式 迭代器模式

iterator,提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露該物件的內部表示。迭代器模式就是分離了集合物件的遍歷行為,抽象出乙個迭代器類來負責,這樣既可以做到不暴露集合的內部結構,又可讓外部 透明地訪問集合內部的資料。iterator迭代器抽象類 迭代器抽象類 abstract clas...

設計模式 迭代器模式

迭代器模式在我們日常程式設計中使用非常頻繁,像list map 陣列等都會用到迭代器模式。迭代器模式屬於行為型模式,它用於順序訪問集合物件的元素,不需要知道集合物件的底層表示。在迭代器模式結構圖中包含如下幾個角色 它支援以不同的方式遍歷乙個聚合物件。迭代器簡化了聚合類。在同乙個聚合上可以有多個遍歷。...

設計模式 迭代器模式

個人理解 1.迭代器模式 提供一種方法順序訪問乙個聚合物件中的各種元素,而又不暴露該物件的內部表示。2.迭代器模式結構 iterator 抽象迭代器 所有迭代器都需要實現的介面,提供了遊走聚合物件元素之間的方法。concreteiterator 具體迭代器。利用這個具體的迭代器能夠對具體的聚合物件進...