一、 遍歷器大家都用過,內部是如何實現的,該模式設計有什麼內涵呢?
二、遍歷器模式的角色組成
2個接口+3個類,無繼承,有聚合和實現關係。
三、代碼舉例
1、遍歷器接口
public interface Iterator {
public abstract boolean hasNext();
public abstract Object next();
}
2、所要遍歷的集合的接口
public interface Aggregate {
public abstract Iterator iterator();
}
3、基本類---酒囊飯袋:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Glutton {
private String name;
private String position;
}
4、集合-放酒囊飯袋的地方
public class GluttonGarbage implements Aggregate{
//酒囊飯袋數組 聚合Glutton
private Glutton[] gluttons;
//遊標
private int last = 0;
//設置酒囊飯袋垃圾桶的最大容量
public GluttonGarbage(int maxsize) {
this.gluttons = new Glutton[maxsize];
}
//得到某個酒囊飯袋
public Glutton getGluttonAt(int index) {
return gluttons[index];
}
//將一個酒囊飯袋放入數組
public void appendGlutton(Glutton glutton) {
this.gluttons[last] = glutton;
}
//獲取酒囊飯袋垃圾桶的深度
public int getLength() {
return this.last;
}
@Override
public Iterator iterator() {
return new GluttonGarbageIterator(this);
}
}
5、集合的遍歷器---酒囊飯袋集合的遍歷器
package com.miller.datastructure.iterator;
/**
* @program: data-structure
* @description: 酒囊飯袋垃圾桶遍歷器
* @author: Miller.FAN
* @create: 2020-01-29 16:48
**/
public class GluttonGarbageIterator implements Iterator{
//聚合GluttonGarbage
private GluttonGarbage gluttonGarbage;
private int index;
public GluttonGarbageIterator(GluttonGarbage gluttonGarbage) {
this.gluttonGarbage = gluttonGarbage;
this.index = 0;
}
@Override
public boolean hasNext() {
return index >= gluttonGarbage.getLength() ? false:true;
}
@Override
public Object next() {
Glutton glutton = gluttonGarbage.getGluttonAt(index);
index ++;
return glutton;
}
}
四、小總結
基本類---> 基本類的集合 ---> 集合的遍歷器 ---> 集合的接口 ---> 遍歷器的接口
這是一條比較容易理解的路線,垃圾---> 垃圾箱 --->拾荒者 ---> 垃圾箱接口 ---> 拾荒者的手和眼睛。