/**
* 迭代器接口,負責定義\訪問和遍歷元素的接口
* Created by max on 2016/4/13.
*/
public interface Iterator<T> {
/**
* 是否還有下一個元素
* @return true表示有
*/
boolean hasNext();
/**
* 返回當前位置的元素並將位置移至下一位
* @return
*/
T next();
}
ConcreteIterator:具體迭代器類,主要是實現迭代器接口,並記錄遍歷的當前位置
/**
* 具體迭代器類,主要是實現迭代器接口,並記錄遍歷的當前位置
* Created by max on 2016/4/13.
*/publicclassConcreteIterator<T> implementsIterator<T>{privateList<T> list = new ArrayList<>();
private int cursor = 0;
public ConcreteIterator(List<T> list) {
this.list = list;
}
@Override
public boolean hasNext() {
return cursor != list.size();
}
@Override
public T next() {
T obj = null;
if (this.hasNext()) obj = this.list.get(cursor++);
return obj;
}
}
Aggregate:容器接口.負責提供創建具體迭代器角色的接口
/**
* 容器接口.負責提供創建具體迭代器角色的接口
* Created by max on 2016/4/13.
*/
public interface Aggregate<T> {
/**
* 添加一個元素
* @param obj 元素
*/
void add(T obj);
/**
* 移除一個元素
* @param obj
*/
void remove(T obj);
/**
* 獲取容器的迭代器
* @return 迭代器對象
*/
Iterator<T> iterator();
}
ConcreteAggregate:具體容器類,具體迭代器角色與該容器相關聯.
/**
* 具體容器類,具體迭代器角色與該容器相關聯
* Created by max on 2016/4/13.
*/publicclassConcreteAggregate<T> implementsAggregate<T> {privateList<T> list = new ArrayList<>();
@Override
public void add(T obj) {
list.add(obj);
}
@Override
public void remove(T obj) {
list.remove(obj);
}
@Override
public Iterator<T> iterator() {
returnnew ConcreteIterator<T>(list);
}
}
Client:客戶類
/**
* 客戶類
* Created by max on 2016/4/13.
*/publicclassClient {publicstaticvoidmain(String args[]){
Aggregate<String> a = new ConcreteAggregate<>();
a.add("第一個");
a.add("第二個");
a.add("第三個");
a.add("第四個");
Iterator<String> i = a.iterator();
//其實這裏就是迭代器遍歷容器的元素,內部還是list實現的while(i.hasNext()){
i.next();
}
}
}