一、 遍历器大家都用过,内部是如何实现的,该模式设计有什么内涵呢?
二、遍历器模式的角色组成
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;
}
}
四、小总结
基本类---> 基本类的集合 ---> 集合的遍历器 ---> 集合的接口 ---> 遍历器的接口
这是一条比较容易理解的路线,垃圾---> 垃圾箱 --->拾荒者 ---> 垃圾箱接口 ---> 拾荒者的手和眼睛。