迭代器 java_百战程序员:Java设计模式之迭代器模式
迭代器是針對集合對象而生的,對于集合對象而言,必然涉及到集合元素的添加刪除操作,同時也肯定支持遍歷集合元素的操作,我們此時可以把遍歷操作也放在集合對象中,但這樣的話,集合對象就承擔太多的責任了,面向對象設計原則中有一條是單一職責原則,所以我們要盡可能地分離這些職責,用不同的類去承擔不同的職責。迭代器模式就是用迭代器類來承擔遍歷集合元素的職責。分離集合對象的遍歷行為,抽象出一個迭代器類來負責,這樣既可以做到不暴露集合的內部結構,又可讓外部代碼透明的訪問集合內部的數據。
迭代器模式的角色構成
(1)迭代器角色(Iterator):定義遍歷元素所需要的方法,一般來說會有這么三個方法:取得下一個元素的方法next(),判斷是否遍歷結束的方法hasNext()),移出當前對象的方法remove(),
(2)具體迭代器角色(Concrete Iterator):實現迭代器接口中定義的方法,完成集合的迭代。
(3)容器角色(Aggregate): 一般是一個接口,提供一個iterator()方法,例如java中的Collection接口,List接口,Set接口等
(4)具體容器角色(ConcreteAggregate):就是抽象容器的具體實現類,比如List接口的有序列表實現ArrayList,List接口的鏈表實現LinkList,Set接口的哈希列表的實現HashSet等。
靜態迭代子和動態迭代子:
靜態迭代子由聚集對象創建,并持有聚集對象的一份快照,在產生后這個快照的內容就不再變化,客戶端可以繼續修改原聚集的內容,但是迭代子對象不會反映出聚集的新變化;
靜態迭代子的好處是它的安全性和簡易性,換言之,靜態迭代子易于實現,不容易出現錯誤,但是由于靜態迭代子將原聚集復制了一份,因此它的短處是對時間和內存資源的消耗;
動態迭代子與靜態迭代子完全相反,在迭代子被產生之后,迭代子還保持著對聚集元素的引用,因此,任何對原聚集內容的修改都會在迭代子對象上反映出來。
完整的動態迭代子不容易實現,但是簡化的動態迭代子并不難實現。我們遇到的迭代子就是簡化的動態迭代子。
“我們相信人人都可以成為一個IT大神,現在開始,選擇一條陽光大道,助你入門,學習的路上不再迷茫。這里是北京尚學堂,初學者轉行到IT行業的聚集地。"
總結
以上是生活随笔為你收集整理的迭代器 java_百战程序员:Java设计模式之迭代器模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: socket timeout是什么引起的
- 下一篇: inputstreamreader 编码