在軟件開發(fā)中,我們經(jīng)常需要使用聚合對象(集合)來存儲一系列數(shù)據(jù)瓶籽。聚合對象擁有兩個職責:一是存儲數(shù)據(jù);二是遍歷數(shù)據(jù)埂材。從依賴性來看塑顺,前者是聚合對象的基本職責;而后者既是可變化的嘲更,又是可分離的龄糊。因此,可以將遍歷數(shù)據(jù)的行為從聚合對象中分離出來赛蔫,封裝在一個被稱之為“迭代器”的對象中裤唠,由迭代器來提供遍歷聚合對象內(nèi)部數(shù)據(jù)的行為挤牛,這將簡化聚合對象的設(shè)計,更符合“單一職責原則”的要求巧骚。
迭代器模式(Iterator Pattern):提供一種方法來訪問聚合對象赊颠,而不用暴露這個對象的內(nèi)部表示,其別名為游標(Cursor)劈彪。
聚合類可以看做迭代器的工廠竣蹦,提供了迭代器的創(chuàng)建方法。
一個迭代器的典型代碼如下:
interface Iterator {
????public void first(); //將游標指向第一個元素
????public void next(); //將游標指向下一個元素
????public boolean hasNext(); //判斷是否存在下一個元素
????public Object currentItem(); //獲取游標指向的當前元素
}
為了能夠讓迭代器可以訪問到聚合對象中的數(shù)據(jù)沧奴,具體迭代器中需要維持一個對具體聚合對象的引用痘括。除了使用關(guān)聯(lián)關(guān)系外,我們還可以將迭代器類設(shè)計為聚合類的內(nèi)部類滔吠,JDK中的迭代器類就是通過這種方法來實現(xiàn)的纲菌,在JDK中,Collection接口和Iterator接口充當了迭代器模式的抽象層疮绷,分別對應(yīng)于抽象聚合類和抽象迭代器翰舌,而Collection接口的子類充當了具體聚合類。以List為例:
迭代器模式的主要優(yōu)點如下:
? ? ? (1) 它支持以不同的方式遍歷一個聚合對象冬骚,在同一個聚合對象上可以定義多種遍歷方式椅贱。在迭代器模式中只需要用一個不同的迭代器來替換原有迭代器即可改變遍歷算法,我們也可以自己定義迭代器的子類以支持新的遍歷方式只冻。
? ? ? (2) 迭代器簡化了聚合類庇麦。
————————————————
版權(quán)聲明:本文為CSDN博主「LoveLion」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議喜德,轉(zhuǎn)載請附上原文出處鏈接及本聲明山橄。
原文鏈接:https://blog.csdn.net/lovelion/article/details/9992931