Java设计模式之迭代器模式
迭代器是針對(duì)集合對(duì)象而生的,對(duì)于集合對(duì)象而言,必然涉及到集合元素的添加刪除操作,同時(shí)也肯定支持遍歷集合元素的操作,我們此時(shí)可以把遍歷操作也放在集合對(duì)象中,但這樣的話,集合對(duì)象就承擔(dān)太多的責(zé)任了,面向?qū)ο笤O(shè)計(jì)原則中有一條是單一職責(zé)原則,所以我們要盡可能地分離這些職責(zé),用不同的類去承擔(dān)不同的職責(zé)。迭代器模式就是用迭代器類來承擔(dān)遍歷集合元素的職責(zé)。分離集合對(duì)象的遍歷行為,抽象出一個(gè)迭代器類來負(fù)責(zé),這樣既可以做到不暴露集合的內(nèi)部結(jié)構(gòu),又可讓外部代碼透明的訪問集合內(nèi)部的數(shù)據(jù)。
迭代器模式的角色構(gòu)成
(1)迭代器角色(Iterator):定義遍歷元素所需要的方法,一般來說會(huì)有這么三個(gè)方法:取得下一個(gè)元素的方法next(),判斷是否遍歷結(jié)束的方法hasNext()),移出當(dāng)前對(duì)象的方法remove(),
(2)具體迭代器角色(Concrete Iterator):實(shí)現(xiàn)迭代器接口中定義的方法,完成集合的迭代。
(3)容器角色(Aggregate): 一般是一個(gè)接口,提供一個(gè)iterator()方法,例如java中的Collection接口,List接口,Set接口等
(4)具體容器角色(ConcreteAggregate):就是抽象容器的具體實(shí)現(xiàn)類,比如List接口的有序列表實(shí)現(xiàn)ArrayList,List接口的鏈表實(shí)現(xiàn)LinkList,Set接口的哈希列表的實(shí)現(xiàn)HashSet等。
靜態(tài)迭代子和動(dòng)態(tài)迭代子:
靜態(tài)迭代子由聚集對(duì)象創(chuàng)建,并持有聚集對(duì)象的一份快照,在產(chǎn)生后這個(gè)快照的內(nèi)容就不再變化,客戶端可以繼續(xù)修改原聚集的內(nèi)容,但是迭代子對(duì)象不會(huì)反映出聚集的新變化;
靜態(tài)迭代子的好處是它的安全性和簡(jiǎn)易性,換言之,靜態(tài)迭代子易于實(shí)現(xiàn),不容易出現(xiàn)錯(cuò)誤,但是由于靜態(tài)迭代子將原聚集復(fù)制了一份,因此它的短處是對(duì)時(shí)間和內(nèi)存資源的消耗;
動(dòng)態(tài)迭代子與靜態(tài)迭代子完全相反,在迭代子被產(chǎn)生之后,迭代子還保持著對(duì)聚集元素的引用,因此,任何對(duì)原聚集內(nèi)容的修改都會(huì)在迭代子對(duì)象上反映出來。
完整的動(dòng)態(tài)迭代子不容易實(shí)現(xiàn),但是簡(jiǎn)化的動(dòng)態(tài)迭代子并不難實(shí)現(xiàn)。我們遇到的迭代子就是簡(jiǎn)化的動(dòng)態(tài)迭代子。
“我們相信人人都可以成為一個(gè)IT大神,現(xiàn)在開始,選擇一條陽光大道,助你入門,學(xué)習(xí)的路上不再迷茫。這里是北京尚學(xué)堂,初學(xué)者轉(zhuǎn)行到IT行業(yè)的聚集地。"
?為了讓學(xué)習(xí)變得輕松、高效,今天給大家免費(fèi)分享一套Java教學(xué)資源。幫助大家在成為Java架構(gòu)師的道路上披荊斬棘。需要資料的歡迎加入學(xué)習(xí)交流群:9285,05736
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Java设计模式之迭代器模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python prettytable表格
- 下一篇: Java 即将迎来转折点?