### 迭代器模式(Iterator Pattern) #### 一、定義 提供一種方法順序訪問一個聚合對象中各個元素,而又不需要暴露該對象的內部表示。 #### 二、優缺點 **優點:** 1、它支持以不同的方式遍歷一個聚合對象。 2、迭代器簡化了聚合類。 3、在同一個聚合上可以有多個遍歷。 4、 ...
迭代器模式(Iterator Pattern)
一、定義
提供一種方法順序訪問一個聚合對象中各個元素,而又不需要暴露該對象的內部表示。
二、優缺點
優點: 1、它支持以不同的方式遍歷一個聚合對象。 2、迭代器簡化了聚合類。 3、在同一個聚合上可以有多個遍歷。 4、在迭代器模式中,增加新的聚合類和迭代器類都很方便,無須修改原有代碼。
缺點: 1、由於迭代器模式將存儲數據和遍曆數據的職責分離,增加新的聚合類需要對應增加新的迭代器類,類的個數成對增加,這在一定程度上增加了系統的複雜性。
三、具體實現
3.1 原型圖
- Iterator(迭代器):迭代器定義訪問和遍歷元素的介面。
- ConcreteIterator(具體迭代器):具體迭代器實現迭代器介面,對該聚合遍歷時跟蹤當前位置。
- Aggregate(聚合):聚合定義創建相應迭代器對象的介面。
- ConcreteAggregate(具體聚合):具體聚合實現創建相應迭代器的介面,該操作返回ConcreteIterator的一個適當的實例。
3.2 實現
1、創建介面:
/**
* @author zhongtao
* @date 2023/6/17 18:48
*/
public interface Iterator {
public boolean hasNext();
public Object next();
}
/**
* @author zhongtao
* @date 2023/6/17 18:48
*/
public interface Container {
public Iterator getIterator();
}
2、創建實現了 Container 介面的實體類。該類有實現了 Iterator 介面的內部類 NameIterator。
/**
* @author zhongtao
* @date 2023/6/17 18:48
*/
public class NameRepository implements Container {
public String[] names = {"1" , "1" ,"1" , "1"};
@Override
public Iterator getIterator() {
return new NameIterator();
}
private class NameIterator implements Iterator {
int index;
@Override
public boolean hasNext() {
if(index < names.length){
return true;
}
return false;
}
@Override
public Object next() {
if(this.hasNext()){
return names[index++];
}
return null;
}
}
}
3、使用 NameRepository 來獲取迭代器,並列印名字。
/**
* @author zhongtao
* @date 2023/6/17 18:49
*/
public class IteratorPatternDemo {
public static void main(String[] args) {
NameRepository namesRepository = new NameRepository();
for (Iterator iter = namesRepository.getIterator(); iter.hasNext(); ) {
String name = (String) iter.next();
System.out.println("Name : " + name);
}
}
}
4、執行程式,輸出結果:
Name : 1
Name : 2
Name : 3
Name : 4