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架構師的道路上披荊斬棘。需要資料的歡迎加入學習交流群:9285,05736
