設計模式系列(行為型模式)之二 迭代器模式

2021-10-24 09:37:21 字數 1903 閱讀 9233

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

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

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

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

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

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

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

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

迭代器模式通常在以下幾種情況使用:

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

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

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

迭代器模式主要包含以下角色。

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

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

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

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

1.定義乙個抽象迭代器,裡面有迭代器常用的一些抽象查詢遍歷方法

public

abstract

class

iterator

2.定義乙個具體迭代器

//定義乙個具體迭代器

public

class

baseiterator

extends

iterator

@override

public object first()

@override

public object next()

return obj;

}@override

public

boolean

hasnext()

else

}}

3.定義乙個想要的抽象聚合,需要定義儲存新增、刪除聚合物件以及建立迭代器物件的介面。

public

abstract

class

fruit

4.定義乙個具體聚合,繼承自抽象聚合,返回乙個具體迭代器的例項

public

class

fruitimpl

extends

fruit

@override

public

void

remove

(object obj)

@override

public iterator getiterator()

}

5.測試輸出

public

class

test

object obj=iterator.

first()

; system.out.

println

("第乙個資料是:"

+obj.

tostring()

);}}

聚合的內容有:

蘋果香蕉

士多啤梨第乙個資料是:蘋果

行為型模式之二 命令模式

命令模式 command pattern 將乙個請求封裝為乙個物件,從而使我們可用不同的請求對客戶進行引數化 對請求排隊或者記錄請求日誌,以及支援可撤銷的操作。命令模式是一種物件行為型模式。命令模式的結構圖如下所示 抽象命令類一般是乙個介面,在其中宣告了用於執行請求的excute 等方法,通過這些方...

設計模式 行為型模式 迭代器模式

抽象聚合類 abstract class abstractobjectlist public void addobject object obj public void removeobject object obj public list getobjects 宣告建立迭代器物件的抽象工廠方法 p...

設計模式 行為型模式 迭代器模式

提供乙個物件來順序訪問聚合物件中的一系列物件,而不暴露聚合物件的內部表示。屬於一種物件行為型模式。優點訪問聚合物件內部無需暴露它的內部表示 遍歷任務交由迭代器完成,簡化了聚合類 它支援以不同方式遍歷乙個聚合,甚至可以自定義迭代器的子類以支援新的遍歷 增加新的聚合類和迭代器類很方便,無需修改原有 封裝...