标签:bool ret out lis gre ilo err cli add
迭代器模式(Iterator Pattern)是 Java 中使用最多的一种模式,它可以顺序的访问容器中的元素,但不需要知道容器的内部细节
Iterator(抽象迭代器):定义遍历元素所需的基本方法
ConcreteIterator(具体迭代器):根据自己的需求实现抽象方法,完成迭代
Aggregate(抽象容器):定义对容器的基本操作
ConcreteAggregate(具体容器):抽象容器的具体实现类,iterator方法返回一个具体的迭代器
使用迭代器模式实现对数据的遍历
抽象迭代器
public interface Iterator<T> {
boolean hasNext();
T next();
}
具体迭代器
public class ConcreteIterator<T> implements Iterator<T> {
private List<T> list; //遍历的集合
private int index = -1; //遍历的索引
public ConcreteIterator(List<T> list) {
this.list = list;
}
@Override
public boolean hasNext() {
return index < list.size() - 1;
}
@Override
public T next() {
T t = null;
if (this.hasNext()) {
t = list.get(++index);
}
return t;
}
}
抽象容器
public interface Aggregate<T> {
void add(T t);
void remove(T t);
Iterator<T> iterator();
}
具体容器
public class ConcreteAggregate<T> implements Aggregate<T> {
private List<T> list = new ArrayList<>();
@Override
public void add(T obj) {
list.add(obj);
}
@Override
public void remove(T obj) {
list.remove(obj);
}
@Override
public Iterator<T> iterator() {
return new ConcreteIterator<>(list);
}
}
测试类
public class Client {
@Test
public void test() {
Aggregate<String> aggregate = new ConcreteAggregate<>();
aggregate.add("张三");
aggregate.add("李四");
aggregate.add("王五");
Iterator<String> iterator = aggregate.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
运行结果
张三
李四
王五
优点:
缺点:
适用场景:
Java 中的容器对象有很多,基本都涉及到迭代器,我们以 ArrayList 作为例子,剖析它是如何应用迭代器模式的。
打开 ArrayList 源码可以发现:
综上,其基本关系就是:
当然,List 下的实现类不止 ArrayList,Iterator 下也有许多具体迭代器,它们各自有各自的实现方式,共同构建了 Java 中强大的容器类。
(完)
设计模式 - 迭代器模式详解及其在ArrayList中的应用
标签:bool ret out lis gre ilo err cli add
原文地址:https://www.cnblogs.com/songjilong/p/12807345.html