天天看點

行為型模式-疊代器模式1.概述2.類圖3.角色4.優缺點5.案例

1.概述

1.1 定義

         疊代器模式提供了一種方法來通路聚合對象中的各個元素,而不用暴露這個對象内部的表示,其别名為遊标(Cursor)。

1.2 原理

        将周遊行為分離出來,抽象為一個疊代器,專門提供周遊聚合對象内部資料的行為。

1.3 應用場景

      當為聚合對象提供多種周遊方式,或者為周遊不同的聚合結構提供統一的接口時。

2.類圖

行為型模式-疊代器模式1.概述2.類圖3.角色4.優缺點5.案例

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 分析

       通過具體聚合對象傳回其疊代器對象,然後就可用對聚合對象的資料進行周遊。

繼續閱讀