集合遍历[设计模式总结] 9. 迭代器模式
工作之余抽點時間出來寫寫博文,希望對新接觸的朋友有幫助。今天在這里和大家起一學習一下集合遍歷
????
引子
????例如Waitress類要遍歷打印兩種菜單,一種是基于ArrayList,一種是基于數組;
????則Waitress要需對他們分別用兩個不同的邏輯來遍歷。
????
????
義定
????Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.
????迭代器模式供提了一種法方次序拜訪一個聚合象對中的各個素元,而又不暴露該象對的部內表現。
????
????
類圖
????
????
Iterator:抽象迭代器
????這是有所迭代器都必須實現的接口,利用該接口法方可以在集合素元之間游走。可用java.util.Iterator
????
ConcreteIterator:詳細迭代器
????詳細迭代器責負理管前目遍歷的置位、成完集合素元的遍歷。
public class DinerMenuIterator implements Iterator {MenuItem[] list;int position = 0; //記載前當遍歷置位public DinerMenuIterator(MenuItem[] list){this.list = list}public Object next(){MenuItem menuItem = list[position];position = position + 1;return menuItem; }public boolean hasNext(){if (position >= list.length || list[position] == null){return false;} else {return true;}} }????
Aggregate:抽象聚合(集合)
每日一道理 人生是潔白的畫紙,我們個每人就是手握各色筆的畫師;人生也是一條看不到盡頭的長路,我們個每人則是人生道路的遠足者;人生還像是一塊神奇的土地,我們個每人則是手握農具的耕耘者;但人生更像一本難懂的書,我們個每人則是孜孜不倦的讀書郎。
????是對詳細集合類的抽象,便利戶客端代碼,將戶客端代碼從詳細集合象對中解耦。——讓戶客端:針對接口程編,而不針對實現程編
????
ConcreteAggregate:詳細聚合(集合)
????實現createIterator(),返回一個ConcreteIterator象對;該迭代器象對夠能遍歷象對集合。
public class DinerMenu {MenuItem[] menuItems;//返回迭代器接口public Iterator createIterator {return new DinerMenuIterator( menuItems );}//這個法方不再要需,因為會暴露部內實現!!public MenuItem[] getMenuItem(){return menuItems;} }????
長處
????
????
????
缺陷
????
????
應用場景
????盡量不要自己寫迭代器模式。應用Java供提的Iterator一般就足夠了。
????
????注:上例中是數組,所以自己寫了個Iterator;如果是ArrayList則直接應用.iterator()可即!
????
????
????
????
文章結束給大家分享下程序員的一些笑話語錄: 那是習慣決定的,一直保持一個習慣是不好的!IE6的用戶不習慣多標簽,但是最終肯定還是得轉到多標簽的瀏覽器。歷史(軟件UI)的進步(改善)不是以個人意志(習慣)為轉移的!
轉載于:https://www.cnblogs.com/xinyuyuanm/archive/2013/04/21/3034392.html
總結
以上是生活随笔為你收集整理的集合遍历[设计模式总结] 9. 迭代器模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《信息存储理论》笔记
- 下一篇: 长途开车如何缓解疲劳(长途开车必备物品)