迭代器用于對(duì)一個(gè)聚合對(duì)象進(jìn)行遍歷。通過引入迭代器可以將數(shù)據(jù)的遍歷功能從聚合對(duì)象中分離出來矢洲,聚合對(duì)象只負(fù)責(zé)存儲(chǔ)數(shù)據(jù)绅喉,而遍歷數(shù)據(jù)由迭代器完成模狭,簡化了聚合對(duì)象的設(shè)計(jì)颈抚,更符合單一職責(zé)原則的要求。
迭代器模式的定義:提供一種方法順序訪問一個(gè)聚合對(duì)象中的各個(gè)元素嚼鹉,而又不用暴露該對(duì)象的內(nèi)部表示贩汉。
迭代器模式又稱為游標(biāo)模式,它是一種對(duì)象行為型模式锚赤。
迭代器模式的結(jié)構(gòu)與實(shí)現(xiàn):
1.Iterator(抽象迭代器):它定義了訪問和遍歷元素的接口匹舞,聲明了用于遍歷數(shù)據(jù)元素的方法,例如用于獲取第一個(gè)元素的first()方法线脚,用于訪問下一個(gè)元素的next()方法赐稽,用于判斷是否還有下一個(gè)元素的hasNext()方法,用于獲取當(dāng)前元素currentItem()方法等浑侥,在具體 迭代器中將實(shí)現(xiàn)這些方法姊舵。
public interface Iterator {
public void first();
public void next();
public boolean hasNext();
public Object currentItem();
}
2.ConcreteIterator(具體迭代器):實(shí)現(xiàn)了抽象迭代器接口,完成對(duì)聚合對(duì)象的遍歷寓落,同時(shí)在具體迭代器中通過游標(biāo)來記錄在聚合對(duì)象中所處的當(dāng)前位置括丁。
public class ConcreteIterator implements Iterator {
@Override
public void first() {
System.out.println("first");
}
@Override
public void next() {
System.out.println("next");
}
@Override
public boolean hasNext() {
System.out.println("hasNext");
return false;
}
@Override
public Object currentItem() {
System.out.println("currentItem");
return null;
}
}
3.Aggregate(抽象聚合類):用于存儲(chǔ)和管理元素對(duì)象,聲明一個(gè)方法伶选,用于創(chuàng)建一個(gè)迭代器對(duì)象躏将,充當(dāng)抽象迭代器工廠角色。
public interface Aggregate {
Iterator createIterator();
}
4.ConcreteAggregate(具體聚合類):是抽象聚合類的子類考蕾,實(shí)現(xiàn)了在抽象聚合類中聲明的方法,該方法返回一個(gè)與該具體聚合類對(duì)應(yīng)的具體迭代器實(shí)例会宪。
public class ConcreteAggregate implements Aggregate {
@Override
public Iterator createIterator() {
return new ConcreteIterator();
}
}