




















迭代器模式是我们学习一个设计时很少用到的、但编码实现时却经常使用到的行为型设计模式。在绝大多数编程语言中, 迭代器已经成为一个基础的类库, 直接用来遍历集合对象。在平时开发中, 我们更多的是直接使用它, 很少会从零去实现一个迭代器。
迭代器模式(Iterator pattern)又叫游标(Cursor)模式, 它的原始定义是:迭代器提供一种对容器对象中的各个元素进行访问的方法, 而又不需要暴露该对象的内部细节。

public interface Iterator {
public boolean hasNext();
public Object next();
}
public interface Container {
public Iterator getIterator();
}
public class NameRepository implements Container {
public String[] names = {"Robert" , "John" , "Julie" , "Lora"};
@Override
public Iterator getIterator() {
return new NameIterator();
}
//迭代器实现, 限制数据只能内部访问;
private class NameIterator implements Iterator {
int index = 0;
@Override
public boolean hasNext() {
if(index < names.length){
return true;
}
return false;
}
// 返回下一个元素, 并且游标向下移动
@Override
public Object next() {
if(this.hasNext()){
return names[index++];
}
return null;
}
}
}
public static void main(String[] args) {
NameRepository namesRepository = new NameRepository();
for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){
String name = (String)iter.next();
System.out.println("Name : " + name);
}
}
1) 迭代器的优点:
2) 迭代器的缺点:
减少程序中重复的遍历代码
对于放入一个集合容器中的多个对象来说, 访问必然涉及遍历算法。如果我们不将遍历算法封装到容器里(比如, List、Set、Map 等), 那么就需要使用容器的人自行去实现遍历算法, 这样容易造成很多重复的循环和条件判断语句出现, 不利于代码的复用和扩展, 同时还会暴露不同容器的内部结构。而使用迭代器模式是将遍历算法作为容器对象自身的一种“属性方法”来使用, 能够有效地避免写很多重复的代码, 同时又不会暴露内部结构。
当需要为遍历不同的集合结构提供一个统一的接口时或者当访问一个集合对象的内容而无须暴露其内部细节的表示时。
迭代器模式把对不同集合类的访问逻辑抽象出来, 这样在不用暴露集合内部结构的情况下, 可以隐藏不同集合遍历需要使用的算法, 同时还能够对外提供更为简便的访问算法接口。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。