在不暴露内部细节的情况下,可以访问容器内部。我们常用的Collection集合就是用了迭代器模式.
iterator中保存这个遍历的坐标postion,next 就返回下一个值,hasNext则判断是否有下一个对象存在
类图如下:
![](https://img.haomeiwen.com/i18383899/48c0023a7a17f555.jpg)
具体实现如下:
List接口
public interface List<T> {
Iterator<T> iterator();
void add(T t);
}
iterator接口
public interface Iterator<T> {
T next();
boolean hasNext();
}
ConcreateList类
public class ConcreateList<T> implements List {
Object [] array = new Object[3];
int cursor;
@Override
public Iterator iterator() {
return new ConcreateIterator();
}
@Override
public void add(Object o) {
array[cursor++] = o;
}
class ConcreateIterator implements Iterator{
int index;
@Override
public Object next() {
return array[index++];
}
@Override
public boolean hasNext() {
return index < array.length;
}
}
public static void main(String[] args) {
List<Integer> list = new ConcreateList<>();
list.add(1);
list.add(2);
list.add(3);
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
网友评论