場(chǎng)景
- 提供一種可以遍歷聚合對(duì)象的方式。又稱(chēng)為游標(biāo)cursor模式
- 聚合對(duì)象:存儲(chǔ)數(shù)據(jù)
- 迭代器:遍歷數(shù)據(jù)
結(jié)構(gòu)

迭代器模式
實(shí)現(xiàn)
package iterator;
// 自定義迭代器接口
public interface MyIterator {
void first(); // 將游標(biāo)指向第一個(gè)
void next(); // 將游標(biāo)指向下一個(gè)
boolean hasNext(); // 判斷是否存在下一個(gè)
boolean isFirst();
boolean isLast();
Object getCurrentObject(); // 獲取當(dāng)前游標(biāo)指向的對(duì)象
}
package iterator;
import java.util.ArrayList;
import java.util.List;
// 自定義聚合類(lèi)
public class ConcreteMyAggregte {
private List<Object> list = new ArrayList<Object>();
public void addObject(Object o){
list.add(o);
}
public void removeObject(Object o){
list.remove(o);
}
public List<Object> getList() {
return list;
}
public void setList(List<Object> list) {
this.list = list;
}
public MyIterator createIterator(){
return new ConcreteIterator();
}
// 使用內(nèi)部類(lèi)定義迭代器,可以直接使用外部類(lèi)的屬性
private class ConcreteIterator implements MyIterator{
private int cursor; // 定義游標(biāo)用于記錄遍歷時(shí)的位置
private int size = list.size();
public void first() {
cursor = 0;
}
public void next() {
if(cursor < size){
cursor++;
}
}
public boolean hasNext() {
return cursor < size;
}
public boolean isFirst() {
return cursor == 0;
}
public boolean isLast() {
return cursor == size-1;
}
public Object getCurrentObject() {
return list.get(cursor);
}
}
}
開(kāi)發(fā)中常見(jiàn)場(chǎng)景
- JDK內(nèi)置的迭代器(List/Set)