迭代器模式又稱游標模式,該模式可以順序訪問一個集合中元素而不必暴露集合內部對象。 在Java集合框架Collection中廣泛使用該模式來遍歷內部元素。所有熟悉java語言的應該都瞭解並應用過。 採用迭代器遍歷對象。 迭代器結構: 聚合對象(collection):存儲數據 迭代器:遍曆數據 例子: ...
迭代器模式又稱游標模式,該模式可以順序訪問一個集合中元素而不必暴露集合內部對象。
在Java集合框架Collection中廣泛使用該模式來遍歷內部元素。所有熟悉java語言的應該都瞭解並應用過。
採用迭代器遍歷對象。
迭代器結構:
聚合對象(collection):存儲數據
迭代器:遍曆數據
例子:
簡單自己實現一個列表元素的迭代器。
public interface MyIterator { //指向第一個元素 void first(); //指向下一個元素 Object next(); //是否存在下一個元素 boolean hasNext(); boolean isFirst(); boolean isLast(); }
/** * 自定義集合對象 */ public class MyCollection { private List<Object> list = new ArrayList<>(); public void add(Object obj) { list.add(obj); } public void remove(Object obj) { list.remove(obj); } public List<Object> getList() { return list; } public void setList(List<Object> list) { this.list = list; } public MyIterator iterator() { return new SelfIterator(); } class SelfIterator implements MyIterator { //定義一個索引位置表示游標 private int index; //指向第一個元素即索引為0 @Override public void first() { index = 0; } @Override public Object next() { if (index < list.size()) { Object obj = list.get(index); index++; return obj; } return null; } @Override public boolean hasNext() { return index < list.size(); } @Override public boolean isFirst() { return index == 0; } @Override public boolean isLast() { return index == (list.size() - 1); } } }
簡化起見,在這個集合對象封裝一個數組,初始化時就創建好該數組
public class Client { public static void main(String[] args) { MyCollection collection = new MyCollection(); collection.add("1"); collection.add("2"); collection.add("3"); MyIterator iterator = collection.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } } }
迭代器模式使遍歷演算法和集合對象分開,單獨被封裝在迭代子對象中,外部只需要調用迭代子對象的方法。
迭代和集合對象解耦。新增迭代方式的時候可以不用修改集合對象,只需新增迭代器對象即可,符合開閉原則。