0%

设计模式-迭代器模式

提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。

类图

3MHjaV.md.png

实现

1
2
3
4
5
public interface Aggregate<E> {

public Iterator<E> createIterator();

}
1
2
3
4
5
6
7
public interface Iterator<E> {

public boolean hasNext();

public E next();

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.ArrayList;
import java.util.List;

public class ConcreteAggregate implements Aggregate<Object> {

private List<Object> items = new ArrayList<>();

public void add(Object item) {
items.add(item);
}

public Object get(int index) {
return items.get(index);
}

public int size() {
return items.size();
}

@Override
public Iterator<Object> createIterator() {
return new ConcreteIterator(this);
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class ConcreteIterator implements Iterator<Object> {

private ConcreteAggregate aggregate;
private int index = 0;

public ConcreteIterator(ConcreteAggregate aggregate) {
this.aggregate = aggregate;
}

@Override
public boolean hasNext() {
if (index >= aggregate.size()) {
return false;
}
return true;
}

@Override
public Object next() {
return aggregate.get(index++);
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Client {

public static void main(String[] args) {
ConcreteAggregate aggregate = new ConcreteAggregate();
aggregate.add(1);
aggregate.add(2);
aggregate.add(3);
Iterator<Object> iterator = aggregate.createIterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}

}