Java設(shè)計模式之-迭代器模式(Iterator)

迭代器這個名詞對于熟悉Java的人來說絕對不陌生。我們常常使用JDK提供的迭代接口進(jìn)行java collection的遍歷:

Iterator it = list.iterator();
while(it.hasNext()){
    Object obj = it.next();
    ......
}

其實(shí)這就是在Java語言中完美的迭代器模式:提供一種方法順序訪問一個聚合對象中各個元素, 而又不需暴露該對象的內(nèi)部表示。

Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.

我們來看一下迭代器模式的UML類圖:


迭代器模式
  1. 迭代器角色(Iterator):迭代器角色負(fù)責(zé)定義訪問和遍歷元素的接口。
  2. 具體迭代器角色(Concrete Iterator):具體迭代器角色要實(shí)現(xiàn)迭代器接口,并要記錄遍歷中的當(dāng)前位置。
  3. 容器角色(Container):容器角色負(fù)責(zé)提供創(chuàng)建具體迭代器角色的接口。
  4. 具體容器角色(Concrete Container):具體容器角色實(shí)現(xiàn)創(chuàng)建具體迭代器角色的接口——這個具體迭代器角色于該容器的結(jié)構(gòu)相關(guān)。

一般在Java中,我們有很多集合類來代表Aggregate角色,如ArrayList、LinkedList等,而這些集合類已經(jīng)實(shí)現(xiàn)了Iterator接口。

總地來說,迭代器模式就是分離了集合對象的迭代行為,抽象出一個迭代器類來負(fù)責(zé),這樣既可做到不暴露集合的內(nèi)部結(jié)構(gòu),又可以讓外部代碼可以透明的訪問集合內(nèi)部的元素。迭代器模式在訪問數(shù)組、集合、列表等數(shù)據(jù)時,尤其是數(shù)據(jù)庫數(shù)據(jù)操作時,是非常普遍的應(yīng)用,但由于它太普遍了,所以各種高級語言都對他進(jìn)行了封裝,所以反而給人感覺此模式本身不太常用了。今天我們就不在這個上面再花時間進(jìn)行代碼的編寫,大家有興趣可以直接看一下JDK中相關(guān)的代碼,能夠?qū)W到很多。

加油!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容