迭代器模式(Iterator Pattern)目前已經(jīng)是一個(gè)沒落的模式,基本上沒人會(huì)單獨(dú)寫一個(gè)迭
代器
定義
Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.(它提供一種方法訪問一個(gè)容器對(duì)象中各個(gè)元素完疫,而又不需暴露該對(duì)象的內(nèi)部細(xì)節(jié)。)
迭代器是為容器服務(wù)的,那什么是容器呢? 能容納對(duì)象的所有類型都可以稱之為容
器,例如Collection集合類型鹏秋、Set類型等,迭代器模式就是為解決遍歷這些容器中的元素而
誕生的亡笑。
迭代器模式提供了遍歷容器的方便性侣夷,容器只要管理增減元素就可以了,需要遍歷時(shí)交
由迭代器進(jìn)行
簡(jiǎn)單看一個(gè)例子:
ICar
public interface ICar {
//生產(chǎn)一輛車
public void add(String name,Integer price);
//獲得一個(gè)可以被遍歷的對(duì)象
public ICarIterator iterator();
public String getCarInfo();
}
Car
/**
* @author shuliangzhao
* @Title: Car
* @ProjectName design-parent
* @Description: TODO
* @date 2019/6/16 23:36
*/
public class Car implements ICar {
//定義一個(gè)車的集合
private ArrayList<ICar> projectList = new ArrayList<ICar>();
private String name;
private Integer price;
public Car() {
}
private Car(String name,Integer price) {
this.name = name;
this.price = price;
}
@Override
public void add(String name, Integer price) {
this.projectList.add(new Car(name,price));
}
@Override
public ICarIterator iterator() {
return new CarIterator(projectList);
}
@Override
public String getCarInfo() {
return name + "價(jià)格是" + price;
}
}
ICarIterator
/**
* @author shuliangzhao
* @Title: ICarIterator
* @ProjectName design-parent
* @Description: TODO
* @date 2019/6/16 23:33
*/
public interface ICarIterator extends Iterator {
}
CarIterator
* @author shuliangzhao
* @Title: CarIterator
* @ProjectName design-parent
* @Description: TODO
* @date 2019/6/16 23:38
*/
public class CarIterator implements ICarIterator {
private ArrayList<ICar> carList = new ArrayList<ICar>();
private int currentItem = 0;
public CarIterator(ArrayList<ICar> carList) {
this.carList = carList;
}
@Override
public boolean hasNext() {
boolean b = true;
if(this.currentItem>=carList.size()||this.carList.get(this.currentItem) == null) {
b = false;
}
return b;
}
@Override
public ICar next() {
return (ICar) this.carList.get(this.currentItem++);
}
}
客戶端
/**
* @author shuliangzhao
* @Title: Client
* @ProjectName design-parent
* @Description: TODO
* @date 2019/6/16 23:43
*/
public class Client {
public static void main(String[] args) {
ICar car = new Car();
car.add("寶馬X1",200000);
car.add("寶馬X2",300000);
car.add("寶馬X3",400000);
car.add("寶馬X4",500000);
car.add("寶馬X5",600000);
car.add("寶馬X6",700000);
ICarIterator iterator = car.iterator();
while (iterator.hasNext()) {
Car car1 = (Car)iterator.next();
System.out.println(car1.getCarInfo());
}
}
}
Java已經(jīng)把迭代器給我們準(zhǔn)備好了仑乌,我們?cè)偃懙靼偻兀陀悬c(diǎn)
多余了。所以呀晰甚,這個(gè)迭代器模式也有點(diǎn)沒落了衙传,基本上很少有項(xiàng)目再獨(dú)立寫迭代器了,直接使用Collection下的實(shí)現(xiàn)類就可以完美地解決問題厕九。
劃重點(diǎn):如果你是做Java開發(fā)蓖捶,盡量不要自己寫迭代器模式!省省吧扁远,使用Java提供的Iterator一般就能滿足你的要求了俊鱼。之所以舉這個(gè)例子是讓大家了解有這個(gè)迭代器模式。