設計模式(十五)迭代器模式

2022-09-08 15:45:10 字數 2355 閱讀 5051

1、定義

提供乙個物件來順序訪問聚合物件中的一系列資料,而不暴露聚合物件的內部表示。是一種物件行為型模式。

2、優缺點

優點封裝性好,為遍歷不同的聚合結構提供乙個統一的介面;

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

遍歷任務交由迭代器完成,這簡化聚合類;

支援以不同方式遍歷乙個聚合,甚至可以自定義迭代器的子類以支援新的遍歷;

增加新的聚合類和迭代器類都很方便,無須修改原有**,符合開閉原則。

缺點增加了類的個數,這在一定程度上增加了系統的複雜性。在日常的開發過程中,幾乎很少會自己寫迭代器。除非需要定製乙個自己實現的資料結構對應的迭代器,否則,開源框架提供的api完全夠用。

3、uml類圖

主要包含以下角色:

抽象聚合(aggregate)角色:定義儲存、新增、刪除聚合物件以及建立迭代器物件的介面;

具體聚合(concreteaggregate)角色:實現抽象聚合類,返回乙個具體迭代器的例項;

抽象迭代器(iterator)角色:定義訪問和遍歷聚合元素的介面,通常包含hasnext()、first()、next()等方法;

具體迭代器(concreteiteratot)角色:實現抽象迭代器介面中所定義的方法,完成對聚合物件的遍歷,記錄遍歷的當前位置。

4、**例項

1

/**2

* @author

it-小林

3* @desc 抽象迭代器

4* @date 2023年08月04日 14:045*/

6public

inte***ce

iterator

1

/**2

* @author

it-小林

3* @desc 具體迭代器

4* @date 2023年08月04日 14:055*/

6public

class concreteiterator implements

iterator

1314

@override

15public

object next()

20return

obj;21}

2223

@override

24public

boolean

hasnext()

28return

true;29

}30 }

1

/**2

* @author

it-小林

3* @desc 抽象類集合

4* @date 2023年08月04日 14:095*/

6public

inte***ce

aggregate

1

/**2

* @author

it-小林

3* @desc 具體聚合類

4* @date 2023年08月04日 14:115*/

6public

class concreteaggregate implements

aggregate

1314

@override

15public

void

remove(object obj)

1819

@override

20public

iterator iterator()

23 }

1

/**2

* @author

it-小林

3* @desc 測試類

4* @date 2023年08月04日 14:145*/

6public

class

client 17}

18 }

5、應用場景

當需要為聚合物件提供多種遍歷方式時;

當需要為遍歷不同的聚合結構提供乙個統一的介面時;

當訪問乙個聚合物件的內容而無須暴露其內部細節的表示。

6、模式的擴充套件

迭代器模式常常與組合模式結合起來使用,在對組合模式中的容器構件進行訪問時,經常將迭代器潛藏在組合模式的容器構成類中。當然,也可以構造乙個外部迭代器來對容器構件進行訪問,其結構圖如圖。

C 設計模式 十五 迭代器模式

對聚合類 如列表 的訪問和遍歷從列表物件中分離出來,並放入乙個迭代器物件中 迭代器定義了乙個訪問該列表元素的介面,迭代器負責跟蹤當前的元素,即知道哪些元素已經遍歷過了,如下圖所示 iterator 定義迭代器訪問和遍歷元素的介面 concreteiterator 實現具體的迭代器 aggregate...

PHP設計模式系列(十五) 迭代器模式

提供一種方法順序訪問乙個聚合物件中的各個元素,而不是暴露其內部的表示。php spl中已經提供了迭代器介面iterator和容器介面iteatoraggragate,這裡直接實現spl的裡的迭代器。迭代器模式 concreteiterator 具體迭代器 class concreteiterator...

設計模式 迭代器模式

迭代器模式是屬於物件行為性的模式。首先是定義 提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露物件的表示方法。迭代器的結構圖 適用性 1 訪問乙個聚合物件的內容而無需暴露它的內部表示 2 支援聚合物件的多種遍歷 3 為遍歷不同的聚合結構提供乙個統一的介面 支援多型迭代 協作 concretei...