重要程度:★★★★★ 一、什麼是迭代器模式 提供一種方法訪問一個容器對象中各個元素,而又不需暴露該對象的內部細節。 二、補充說明 單一職責原則,分離了集合對象的遍歷行為,抽象出一個迭代器類來負責; 三、角色 迭代器介面 迭代器具體實現 抽象容器 具體容器 四、例子,JAVA實現 例子說明:使用迭代器
重要程度:★★★★★
一、什麼是迭代器模式
提供一種方法訪問一個容器對象中各個元素,而又不需暴露該對象的內部細節。
二、補充說明
單一職責原則,分離了集合對象的遍歷行為,抽象出一個迭代器類來負責;
三、角色
迭代器介面
迭代器具體實現
抽象容器
具體容器
四、例子,JAVA實現
例子說明:使用迭代器遍歷容器
迭代器介面
package com.pichen.dp.behavioralpattern.iterator; public interface Iterator { public Object first(); public Object previous(); public Object next(); public boolean hasNext(); }
迭代器具體實現
package com.pichen.dp.behavioralpattern.iterator; import java.util.List; public class MyIterator implements Iterator{ private List<Object> list; private int index = 0; public MyIterator(List<Object> list) { this.list = list; } @Override public Object previous() { if((this.index - 1) < 0){ return null; }else{ return this.list.get(--index); } } @Override public Object next() { if((this.index + 1) >= this.list.size()){ return null; }else{ return this.list.get(++index); } } @Override public boolean hasNext() { if(this.index < (this.list.size() - 1)){ return true; } return false; } /** * 〈一句話功能簡述〉 * 〈功能詳細描述〉 * @see com.pichen.dp.behavioralpattern.iterator.Iterator#first() * @return */ @Override public Object first() { if(this.list.size() <= 0){ return null; }else{ return this.list.get(0); } } }
抽象容器
package com.pichen.dp.behavioralpattern.iterator; public abstract class Container { public abstract Iterator iterator(); public abstract void put(Object obj); }
具體容器
package com.pichen.dp.behavioralpattern.iterator; import java.util.ArrayList; import java.util.List; public class MyContainer extends Container{ private List<Object> list; public MyContainer() { this.list = new ArrayList<Object>(); } @Override public void put(Object obj){ this.list.add(obj); } @Override public Iterator iterator() { return new MyIterator(list); } }
客戶端調用示例
package com.pichen.dp.behavioralpattern.iterator; public class Main { public static void main(String[] args) { //創建一個自定義容器,直接使用ArrayList的實現,僅僅示例作用 Container strContainer = new MyContainer(); strContainer.put("001"); strContainer.put("002"); strContainer.put("003"); Iterator myIterator = strContainer.iterator(); //使用舉例 System.out.println("------------------next、hasNext示例------------------"); System.out.println(myIterator.first()); System.out.println(myIterator.next()); System.out.println(myIterator.hasNext()); System.out.println(myIterator.next()); System.out.println(myIterator.hasNext()); System.out.println(myIterator.next()); System.out.println(myIterator.hasNext()); //使用舉例 System.out.println("------------------previous、hasNext示例------------------"); System.out.println(myIterator.previous()); System.out.println(myIterator.previous()); System.out.println(myIterator.previous()); System.out.println(myIterator.hasNext()); //使用迭代器遍歷 System.out.println("------------------迭代器遍歷示例------------------"); System.out.println(myIterator.first()); while(myIterator.hasNext()){ System.out.println(myIterator.next()); } } }
結果列印
------------------next、hasNext示例------------------ 001 002 true 003 false null false ------------------previous、hasNext示例------------------ 002 001 null true ------------------迭代器遍歷示例------------------ 001 002 003