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