結合案例深入解析迭代器模式 一、基本概念 迭代器模式屬於行為型模式。這種模式用於順序訪問集合對象的元素,不需要知道集合對象的底層表示。如果我們需要統一遍歷不同的集合(容器),也可以利用迭代器模式解決(下面的案例就是解決這個問題)。 二、結構 結構: Container 是聚合類,其中 getIterator() 方法可以產生一個 Iterator; Iterator 主要定義了 hasNext() 和 next() 方法; 每一個Container的實現類都會有一個具體的Iterator實現類來幫助實現迭代; 三、案例 實現兩個容器能夠統一遍歷。(或者兩個以上) 先看代碼結構: (這裡我將兩個迭代器實現類寫在兩個容器內部) 代碼: public interface Container { Iterator getIterator(); } public interface Iterator<E> { boolean hasNext(); E next(); } 兩個容器類,他們內部的容器不同,內部有自帶不同的迭代器:public class ConcreteContainer1 implements Container { public Integer[] arr; public ConcreteContainer1() { arr = new Integer[10]; for(int i = 0; i < 10; i++) arr[i] = i; } @Override public Iterator getIterator() { return new ConcreteIterator1<Integer>(); } private class ConcreteIterator1<E> implements Iterator{ int index; @Override public boolean hasNext() { if(index < arr.length) return true; return false; } @Override public Object next() { if(hasNext()) return arr[index++]; return null; } } } public class ConcreteContainer2 implements Container { public ArrayList arr; public ConcreteContainer2() { arr = new ArrayList(); for(int i = 0; i < 10; i++) arr.add(i); } @Override public Iterator getIterator() { return new ConcreteIterator1<Integer>(); } private class ConcreteIterator1<E> implements Iterator{ int index; @Override public boolean hasNext() { if(index < arr.size()) return true; return false; } @Override public Object next() { if(hasNext()) return arr.get(index++); return null; } } } 測試:// 如果不這麼做,需要區分c1和c2的遍歷方式, 一個是數組,一個是List public class MyTest { public static void main(String[] args){ Container c1 = new ConcreteContainer1(); Container c2 = new ConcreteContainer2(); ArrayList<Iterator>its = new ArrayList<>(); its.add(c1.getIterator()); // 將c1迭代器加入its its.add(c2.getIterator()); // 將c1迭代器加入its // 實現了統一遍歷, 只需要將迭代器加入到 its中即可 for(Iterator it : its) { while(it.hasNext()) System.out.print( it.next() + " "); System.out.println(); } } } 輸出:0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 四、總結 優點: 在同一個聚合上可以有多個遍歷; 在迭代器模式中,增加新的聚合類和迭代器類都很方便,無須修改原有代碼; 免費Java高級資料需要自己領取,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高並發分散式等教程,一共30G。 傳送門:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 推薦閱讀: 相关文章 {{#data}} {{title}} {{/data}}