迭代器模式
定义:
迭代器模式是一种行为型模式,这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。
主要解决:不同的方式来遍历整个整合对象
优点:
它支持以不同的方式遍历一个聚合对象。
迭代器简化了聚合类。
在同一个聚合上可以有多个遍历。
在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。
缺点:
由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
实例代码
定义一个List的迭代器和一个数组迭代器,分别添加元素,遍历打印结果。
- Iterator接口
public interface Iterator<T> {
boolean hasNext();
T next();
}
- ArrayIterator类
public class ArrayIterator<T> implements Iterator<T> {
private T[] array;
private int currentIndex = -1;
public ArrayIterator(T[] array) {
this.array = array;
}
@Override
public boolean hasNext() {
if (array == null) {
return false;
}
if (array.length - currentIndex - 1 > 0) {
return true;
}
return false;
}
@Override
public T next() {
currentIndex++;
return array[currentIndex];
}
}
- ListIterator类
public class ListIterator<T> implements Iterator<T> {
private List<T> list;
private int currentIndex = -1;
public ListIterator(List<T> list) {
this.list = list;
}
@Override
public boolean hasNext() {
if (list == null) {
return false;
}
if (list.size() - currentIndex - 1 > 0) {
return true;
}
return false;
}
@Override
public T next() {
currentIndex++;
return list.get(currentIndex);
}
}
main入口使用
public static void main(String[] args) {
String[] array = new String[]{"cat", "dog", "tiger"};
Iterator<String> iterator = new ArrayIterator<>(array);
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
System.out.println("------------------------------");
List<String> list = new ArrayList<>();
list.add("zhangsan");
list.add("lisi");
list.add("laowang");
iterator = new ListIterator<>(list);
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
打印结果:
cat
dog
tiger
------------------------------
zhangsan
lisi
laowang
这种模式在Java中有比较多的实现,这里仅仅是学习用。