簡介
迭代器設計模式(Iterator Design Pattern),也叫作游標設計模式(Cursor Design Pattern),
迭代器模式將集合物件的遍歷操作從集合類中拆分出來,放到迭代器類中,讓兩者的職責更加單一,
其定義是,提供一種方法來訪問聚合物件,而不暴露這個物件的內部實作,
典型實作
首先,定義一個用于遍歷聚合物件中所存盤元素的抽象迭代器介面,其代碼示例如下:
public interface Iterator {
// 將游標指向第一個元素
public void first();
// 將游標指向下一個元素
public void next();
// 判斷是否存在下一個元素
public boolean hasNext();
// 獲取游標指向的當前元素
public Object currentItem();
}
然后,我們通常將存盤資料的類稱作為聚合類,一般會在聚合類中創建迭代器物件,如下是抽象聚合介面的代碼示例:
public interface Aggregate {
public Iterator creteIterator();
}
在具體迭代器類中,我們需要注入聚合物件,以便后續使用迭代器時能訪問到其資料,其代碼示例如下:
public class ConcreteIterator implements Iterator {
private Aggregate objects;
private Object cursor;
public ConcreteIterator(Aggregate objects) {
this.objects = objects;
}
// 將游標指向第一個元素
public void first() {}
// 將游標指向下一個元素
public void next() {}
// 判斷是否存在下一個元素
public boolean hasNext() {}
// 獲取游標指向的當前元素
public Object currentItem() {}
}
在具體聚合類中,通常是實作存盤資料的邏輯,以及指定具體迭代器的物件,其代碼示例如下:
public class ConcreteAggregate implements Aggregate {
public Iterator creteIterator() {
return new ConcreteIterator(this);
}
}
總結
優點
迭代器模式的主要優點如下:
- 封裝性良好,訪問一個聚合物件的內容而無需暴露它的內部實作
- 將遍歷操作交給迭代器,簡化了復雜聚合類的設計
- 支持以不同的方式遍歷聚合物件,在同一個聚合物件上可以定義多種遍歷方式
- 增加新的聚合類和迭代器類都很方便,滿足開閉原則
缺點
迭代器模式的主要缺點如下:
- 迭代器模式將存盤資料和遍歷資料的職責分離,增加新的聚合類需要對應增加新的迭代器類,類的個數成對增加
- 抽象迭代器的設計難度較大,需要充分考慮系統將來的擴展
適用場景
迭代器模式的適用場景如下:
- 訪問一個聚合物件的內容而無需暴露它的內部實作
- 需要為一個聚合物件提供多種遍歷方式
- 為遍歷不同的聚合物件提供一個統一的介面
原始碼
在 Java 中,迭代器的應用非常廣,
最頂層的 Collection 集合介面繼承了 Iterable 介面,其實表明了所有的集合物件都是可迭代物件,并且都需要實作獲取 Iterator 物件的方法,
將這個原始碼映射到典型實作中,Iterable 介面和 Collection 介面就是抽象聚合介面,Iterator 介面則是抽象迭代器介面,
首發于翔仔的個人博客,點擊查看更多,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/514203.html
標籤:其他
上一篇:設計模式之策略模式
下一篇:流程引擎的架構設計
