package Iterator;
/**
* 迭代器接口
* @param <T>
*/
public interface MyIterator<T> {
/**
* 是否还有下一个元素
* @return true 表示有,false 表示没有
*/
boolean hasNext();
/**
* 返回当前位置的元素并将位置移动到下一位
* @return
*/
T next();
}
package Iterator;
import java.util.ArrayList;
import java.util.List;
public class ConcreteIterator<T> implements MyIterator<T> {
/**
* 模拟用一个 List
*/
private List<T> mList = new ArrayList<>();
private int cursor = 0;
public ConcreteIterator(List<T> list) {
this.mList = list;
}
@Override
public boolean hasNext() {
return cursor != mList.size();
}
@Override
public T next() {
//定义一个临时变量
T obj = null;
if (this.hasNext()) {
obj = this.mList.get(cursor++);
}
return obj;
}
}
package Iterator;
public interface Aggregate<T> {
/**
* 添加一个对象
* @param t
*/
void add(T t);
/**
* 删除的对象
* @param t
*/
void remove(T t);
/**
* 获取容器的迭代器
* @return
*/
MyIterator<T> iterator();
}
package Iterator;
import java.util.ArrayList;
import java.util.List;
public class ConcreteAggregate<T> implements Aggregate<T>{
/**
* 模拟具体容器
*/
private List<T> mLists = new ArrayList<>();
@Override
public void add(T t) {
mLists.add(t);
}
@Override
public void remove(T t) {
mLists.remove(t);
}
@Override
public MyIterator<T> iterator() {
return new ConcreteIterator<T>(mLists);
}
}
- myIterator: 迭代器接口。迭代器接口负责定义、访问和遍历元素的接口。
- Concrete Iterator: 具体迭代器类。具体迭代器类的目的主要是实现迭代器接口,并记录遍历的当前位置。
- Aggregate: 容器接口。容器接口负责提供创建具体迭代器角色的接口。
- Concrete Aggregate: 具体容器类。具体迭代器角色与该容器相关联。