1.概述
1.1 定義
疊代器模式提供了一種方法來通路聚合對象中的各個元素,而不用暴露這個對象内部的表示,其别名為遊标(Cursor)。 1.2 原理
将周遊行為分離出來,抽象為一個疊代器,專門提供周遊聚合對象内部資料的行為。 1.3 應用場景
當為聚合對象提供多種周遊方式,或者為周遊不同的聚合結構提供統一的接口時。
2.類圖
3.角色
1.Iterator | 表示抽象疊代器,定義了通路和周遊元素的接口。 |
2.ConcreteIterator | 表示具體疊代器,實作了抽象疊代器接口,并在對該聚合周遊時跟蹤目前的下标位置。 |
3.Aggregate | 表示抽象聚合,定義并建立相應疊代器對象的接口。 |
4.ConcreteAggregate | 表示具體聚合,實作了抽象聚合接口,建立和實作相應疊代器的接口,并傳回一個ConcreteIterator的執行個體。 |
5.Client | 表示用戶端 |
4.優缺點
4.1 優點
1.當通路和周遊一個聚合對象的内容時,無需暴露它的内部表示。 |
2.可以為聚合對象提供多種周遊方式,或者提供統一的接口。 |
5.案例
5.1 說明
這裡以周遊商品名稱為案例,其中商品名稱儲存在一個字元串數組裡面,通過疊代器從前往後進行周遊。 5.2 代碼
1)抽象疊代器類 /**
* 抽象疊代器類
* @author Administrator
*/
public interface AbstractIterator {
public void next();
public boolean isLast();
public String getNextItem();
}
2)具體疊代器類 /**
* 具體疊代器類
* @author Administrator
*/
public class ConcreteIterator implements AbstractIterator{
private String[] productsName;
private int index;
public ConcreteIterator(AbstractProductList list) {
productsName = list.getProductsName();
index = 0;
}
@Override
public void next() {
if(index < productsName.length) {
index++;
}
}
@Override
public boolean isLast() {
return (index == productsName.length);
}
@Override
public String getNextItem() {
return productsName[index];
}
}
3)抽象聚合對象類 /**
* 抽象聚合類:抽象産品集合
* @author Administrator
*/
public abstract class AbstractProductList {
private String[] productsName;
public AbstractProductList(String[] productsName) {
this.productsName = productsName;
}
public String[] getProductsName() {
return this.productsName;
}
//傳回疊代器對象
public abstract AbstractIterator getIterator();
}
4)具體聚合對象類 /**
* 具體聚合類:具體産品集合
* @author Administrator
*/
public class ConcreteProductList extends AbstractProductList{
public ConcreteProductList(String[] productsName) {
super(productsName);
}
//傳回具體疊代器對象,用于周遊資料
@Override
public AbstractIterator getIterator() {
return new ConcreteIterator(this);
}
}
5)用戶端類 /**
* 用戶端類
* @author Administrator
*/
public class Client {
public static void main(String[] args) {
String[] productsName = {"電腦","手機","充電器","耳機","手表"};
AbstractProductList list = new ConcreteProductList(productsName);
//這裡通過list.getIterator()擷取疊代器對象
AbstractIterator iterator = list.getIterator();
while (!iterator.isLast()) {
System.out.println(iterator.getNextItem());
iterator.next();
}
}
}
4.3 效果
電腦
手機
充電器
耳機
手表
4.4 分析
通過具體聚合對象傳回其疊代器對象,然後就可用對聚合對象的資料進行周遊。