設計模式 --- 迭代器模式
阿新 • • 發佈:2018-11-22
1.定義
提供一種方法順序訪問一個容器物件中的各個元素,而又不需要暴露該物件的內部表示。
2.使用場景
遍歷一個容器物件
3.簡單實現
大部分容器類都有提供迭代方法 不需要我們自己實現,這裡實現一個通用程式碼。
//迭代器介面 interface Iterator<T>{ //是否還有下一個元素 true表示有 false表示沒有 boolean hasNext(); //返回當前位置的元素並將位置移至下一位 T nextT(); } //具體的迭代器類 class ConcreteIterator<T> implements Iterator<T>{ private List<T> list = new ArrayList<T>(); private int cursor = 0; public ConcreteIterator(List<T> list) { this.list = list; } @Override public boolean hasNext() { return cursor != list.size(); } @Override public T nextT() { T obj = null; if (this.hasNext()){ obj = this.list.get(cursor++); } return obj; } } //容器介面 interface Aggregate<T>{ //新增一個元素 void add(T obj); //刪除一個元素 void remove(T obj); //獲取容器的迭代器 Iterator<T> iterator(); } //具體容器類 class ConcreteAggregae<T> implements Aggregate<T>{ private List<T> list = new ArrayList<T>(); @Override public void add(Object obj) { list.add((T) obj); } @Override public void remove(Object obj) { list.remove(obj); } @Override public Iterator iterator() { return new ConcreteIterator<T>(list); } } public class IteratorMode { public static void main(String[] args){ Aggregate<String> a = new ConcreteAggregae<>() ; a.add("a"); a.add("b"); a.add("c"); a.add("d"); Iterator<String> iterator =a.iterator(); while (iterator.hasNext()){ System.out.println(iterator.nextT()); } } }
4.小結
優點:
支援以不同的方式去遍歷一個容器物件,也可以有多個遍歷,弱化了容器與遍歷演算法之間的關係。
缺點:
增加了類檔案。