設計模式之Iterator(迭代器)的設計和使用
阿新 • • 發佈:2019-01-03
目的:
提供一種方法順序訪問或者遍歷一個聚合物件中的各個元素,且不希望暴露該物件的內部結構。
一、設計
1. 因為是聚合物件,所以設計的這個類應該使用類似list這樣的結構體儲存聚合物件;
2.迭代器應該是通用的,適用於各種型別的聚合物件,所以設計的類應該是模板型別;
3.還需要對外提供統一的訪問介面,以及獲取當前元素,遞增到下一個元素,判斷是否末尾元素。
interface MyIterator<T>{ void next(); boolean hasNext(); T getItem(); } public class Test<T>{ private List<T> list = new ArrayList<T>(); private int i = 0; public void add(T item){ list.add(item); } public MyIterator getIterator(){ return new TestIterator(); } class TestIterator implements MyIterator<T>{ public void next(){ i++; } public boolean hasNext(){ return (i >= list.size())? false:true; } public T getItem(){ return list.get(i); } } }
二、使用
Test<String> test = new Test<String>(); test.add("1"); test.add("2"); test.add("3"); test.add("4"); test.add("5"); MyIterator iterator = test.getIterator(); while(iterator.hasNext()){ String item = (String)iterator.getItem(); Log.d(TAG,"item:"+item); iterator.next(); }