首先我们来看一段代码:
List<Member> memberList = listMember();
Iterator<Member> iterator = memberList.iterator();
while (iterator.hasNext()) {
Member next = iterator.next();
...
}
上面的代码是使用迭代器遍历List。我们来看看下面的遍历方法:
for (Member member : memberList) {
...
}
上面的遍历为直接遍历。
直接遍历是集合直接参与的遍历的过程中,这里的遍历方法与集合对象的耦合性太高了。如果我们在直接遍历中操作集合,就出现操作异常。
使用迭代器遍历,我们分离了集合对象与其遍历行为,客户端遍历集合时,是通过迭代器操作的,对客户端来说,隐藏了集合内部细节。使用迭代器遍历,我们在遍历集合的同时操作集合也不会有问题。
实际上迭代器遍历就是使用了迭代器模式。
“Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.(它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。) ”
迭代器模式主要有下面4个要素组成:
迭代器模式结构图如下:
public interface Aggregate {
void add(Object obj);
void remove(Object obj);
Iterator getIterator();
}
public interface Iterator {
Object first();
Object next();
boolean hasNext();
}
测试代码:
测试结果:
聚合的内容有:微信号:Lvshen_9 头条号:Lvshen的技术小屋 CSDN:Lvshen的技术小屋
First:微信号:Lvshen_9
在Java中,集合都提供了迭代器类。如果我们自己要写类似集合的聚合类时,我们就可以使用迭代器类。使用迭代器模式,聚合对象无需暴露内部细节可能被访问,这样保护了聚合对象数据的安全性。
其实在Java开发中,你可能会使用不到迭代器模式,因为在Java类库中,需要使用迭代器模式的类库都已经提供了迭代器类。