定義:(又叫做游標(biāo)模式)
? ? 一種行為型模式
? ? 允許對一組對象元素的遍歷,是一種比較常見的設(shè)計模式
由來:
? ? 我們知道對于數(shù)據(jù)的存儲結(jié)構(gòu)可能會多種多樣,那對于數(shù)據(jù)的遍歷如果依賴數(shù)據(jù)的存儲結(jié)構(gòu)的化就會存在很多種遍歷的方式。所以出現(xiàn)了迭代器模式,不依賴數(shù)據(jù)存儲的數(shù)據(jù)結(jié)構(gòu),即抽象出一個迭代器
UML類圖:

實現(xiàn)步驟:
? ? 1:在容器類(聚合類)中添加一個iterator方法,獲取一個迭代器,并賦予迭代器數(shù)據(jù)訪問權(quán)。
? ? 2:設(shè)計一個迭代器用于對容器類內(nèi)封裝數(shù)據(jù)的遍歷
? ? 3:客戶端請求容器類(聚合類)對象創(chuàng)建一個迭代器對象
? ? 4:客戶端使用迭代器的方法,first(),hasNext(),next()等訪問容器類中的元素
代碼實現(xiàn):
? ? 模擬菜單中的菜品遍歷
? ? 1:數(shù)據(jù)類---菜品

2:菜單類 -- 可以理解為具體的存放數(shù)據(jù)的容器 XXCollection

容器類中需要定義一個iterator方法去獲取到一個迭代器。此處因為jdk中定義好了Iterator接口,所以這里采用了一個內(nèi)部類去實現(xiàn)Iterator迭代器接口,內(nèi)部類MenuIterator就是一個具體的迭代器類。

客戶端:

結(jié)果:

模式總結(jié):
? ? 1:提供了一種方式來順序訪問集合對象中的內(nèi)容,而無需暴漏其內(nèi)部數(shù)據(jù)結(jié)構(gòu)(例如Menu的內(nèi)部存儲數(shù)據(jù)客戶端不需要知道,在遍歷Menu中數(shù)據(jù)時采用Iterator去遍歷)。
? ? 2:為遍歷不同的集合容器類提供了統(tǒng)一的接口。