迭代器模式

2021-10-03 15:07:28 字數 2090 閱讀 5101

定義

迭代器(iterator)模式提供乙個物件來順序訪問聚合物件中的一系列資料,而不暴露聚合物件的內部表示。

迭代器模式是一種物件行為型模式。

要點迭代器模式是通過將聚合物件的遍歷行為分離出來,抽象成迭代器類來實現的,其目的是在不暴露聚合物件的內部結構的情況下,讓外部**透明地訪問聚合的內部資料。

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

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

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

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

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

缺點:增加了類的個數,這在一定程度上增加了系統的複雜性。

主要包含以下角色:

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

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

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

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

場景設計乙個基於list的自定義聚合類,給定 add() 、remove()方法,必須對外隱藏聚合類的內部資料結構,所以也需要設計對應的迭代器。

實現aggregate

/**

* 抽象聚合類

*/public

inte***ce

aggregate

concreteaggregate

/**

* 具體聚合類

*/public

class

concreteaggregate

implements

aggregate

@override

public

void

remove

(t t)

@override

public iterator getiterator()

}

iterator

/**

* 抽象迭代器

*/public

inte***ce

iterator

concreteiterator

/**

* 具體迭代器

*/public

class

concreteiterator

implements

iterator

@override

public t next()

@override

public

boolean

hasnext()

}

client

public

class

client}}

----

----

----

----輸出--

----

----

----

--小學

初中高中

本科碩士

博士

原始碼click here 總結

適用場景:

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

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

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

迭代器模式分離了集合物件的遍歷行為,抽象出乙個迭代器類來負責,這樣既可以做到不暴露集合的內部結構,又可讓外部**透明地訪問集合內部的資料。

迭代器模式

迭代器模式 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...