介紹
迭代器模式在我們?nèi)粘>幊讨惺褂梅浅nl繁力麸,像list可款、map、數(shù)組等都會(huì)用到迭代器模式克蚂。迭代器模式屬于行為型模式筑舅,它用于順序訪問集合對(duì)象的元素,不需要知道集合對(duì)象的底層表示陨舱。
結(jié)構(gòu)圖
在迭代器模式結(jié)構(gòu)圖中包含如下幾個(gè)角色:
- Iterator(抽象迭代器):它定義了訪問和遍歷元素的接口翠拣,聲明了用于遍歷數(shù)據(jù)元素的方法,例如:用于獲取第一個(gè)元素的first()方法游盲,用于訪問下一個(gè)元素的next()方法误墓,用于判斷是否還有下一個(gè)元素的hasNext()方法,用于獲取當(dāng)前元素的currentItem()方法等益缎,在具體迭代器中將實(shí)現(xiàn)這些方法谜慌。
- ConcreteIterator(具體迭代器):它實(shí)現(xiàn)了抽象迭代器接口,完成對(duì)聚合對(duì)象的遍歷莺奔,同時(shí)在具體迭代器中通過游標(biāo)來記錄在聚合對(duì)象中所處的當(dāng)前位置欣范,在具體實(shí)現(xiàn)時(shí),游標(biāo)通常是一個(gè)表示位置的非負(fù)整數(shù)令哟。
- Aggregate(抽象聚合類):它用于存儲(chǔ)和管理元素對(duì)象恼琼,聲明一個(gè)createIterator()方法用于創(chuàng)建一個(gè)迭代器對(duì)象,充當(dāng)抽象迭代器工廠角色屏富。
- ConcreteAggregate(具體聚合類):它實(shí)現(xiàn)了在抽象聚合類中聲明的createIterator()方法晴竞,該方法返回一個(gè)與該具體聚合類對(duì)應(yīng)的具體迭代器ConcreteIterator實(shí)例。
優(yōu)點(diǎn)
- 它支持以不同的方式遍歷一個(gè)聚合對(duì)象狠半。
- 迭代器簡(jiǎn)化了聚合類噩死。
- 在同一個(gè)聚合上可以有多個(gè)遍歷。
- 在迭代器模式中神年,增加新的聚合類和迭代器類都很方便已维,無須修改原有代碼。
缺點(diǎn)
由于迭代器模式將存儲(chǔ)數(shù)據(jù)和遍歷數(shù)據(jù)的職責(zé)分離已日,增加新的聚合類需要對(duì)應(yīng)增加新的迭代器類垛耳,類的個(gè)數(shù)成對(duì)增加,這在一定程度上增加了系統(tǒng)的復(fù)雜性。
總結(jié)
有興趣的同學(xué)可以看看list艾扮、map的源碼既琴,看看iterator的實(shí)現(xiàn)。在迭代器模式中泡嘴,提供了一個(gè)外部的迭代器來對(duì)聚合對(duì)象進(jìn)行訪問和遍歷甫恩,迭代器定義了一個(gè)訪問該聚合元素的接口,并且可以跟蹤當(dāng)前遍歷的元素酌予,了解哪些元素已經(jīng)遍歷過而哪些沒有磺箕。迭代器的引入,將使得對(duì)一個(gè)復(fù)雜聚合對(duì)象的操作變得簡(jiǎn)單抛虫。