迭代器模式(行为型)
设计模式的3个分类:创建型模式、结构型模式、行为型模式
迭代器模式(Iterator Pattern)定义:
迭代器模式用于顺序访问聚合对象中各元素,不需要知道集合对象的底层表示(聚合对象不暴露内部表示)。
迭代器模式图示:

代码实现:
/**
* 迭代接口
* @param <E>
*/
public interface Iterator<E> {
E next();
boolean hasNext();
}
/**
* 聚合对象接口
*/
public interface Aggregate {
Iterator createIterator();
}
/**
* 聚合类1,数据是列表的形式
*/
public class FirstConcreteAggregate implements Aggregate {
private List<Integer> integerList;
public FirstConcreteAggregate() {
integerList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
integerList.add(i);
}
}
@Override
public Iterator createIterator() {
return new FirstConcreteIterator(integerList);
}
}
/**
* 迭代类1
* @param <E>
*/
public class FirstConcreteIterator<E> implements Iterator {
private List<E> eList;
private int index = 0;
public FirstConcreteIterator(List<E> eList) {
this.eList = eList;
}
@Override
public Object next() {
return eList.get(index++);
}
@Override
public boolean hasNext() {
return index < eList.size();
}
}
/**
* 聚合类2,数据是数组的形式
*/
public class SecondConcreteAggregate implements Aggregate {
private String[] strings;
public SecondConcreteAggregate() {
strings = new String[5];
strings[0] = "a";
strings[1] = "b";
strings[2] = "c";
strings[3] = "d";
strings[4] = "e";
}
@Override
public Iterator createIterator() {
return new SecondConcreteIterator(strings);
}
}
/**
* 迭代类2
* @param <E>
*/
public class SecondConcreteIterator<E> implements Iterator {
private E[] arrays;
private int position = 0;
public SecondConcreteIterator(E[] arrays) {
this.arrays = arrays;
}
@Override
public Object next() {
return arrays[position++];
}
@Override
public boolean hasNext() {
return position < arrays.length;
}
}
/**
* Test
*/
public class IteratorPatternDemo {
public static void main(String[] args) {
Aggregate firstAggregate = new FirstConcreteAggregate();
Iterator firstAggregateIterator = firstAggregate.createIterator();
while (firstAggregateIterator.hasNext()) {
System.out.print(firstAggregateIterator.next() + " ");
}
System.out.println();
Aggregate secondAggregate = new SecondConcreteAggregate();
Iterator secondAggregateIterator = secondAggregate.createIterator();
while (secondAggregateIterator.hasNext()) {
System.out.print(secondAggregateIterator.next() + " ");
}
}
}
思考:
某一个具体的设计模式往往针对的是一类问题的解决方案,目标是简化用户的操作(通过接口定义,方法构建等),还是要深入的体会、理解每一个设计模式的精髓。

浙公网安备 33010602011771号