迭代器设计模式(Iterator Pattern)

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

核心思想: 使用不同的方式来遍历整个整合对象。

使用场景:

  • 访问聚合对象的内容而无需暴露他的内部表示
  • 需要为聚合对象提供多种访问方式
  • 为便利不同的聚合结构提供一个统一的接口

迭代器设计模式的优点:

  • 支持一不同的方式遍历一个聚合对象
  • 迭代器简化了聚合类
  • 在同一个聚合上可以有多个遍历
  • 在迭代器设计模式中怎加新的聚合类和迭代类都很方便,无需修改源代码 , 符合开闭原则

迭代器设计模式的缺点:

  • 由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。

示例:

  • 定义迭代器接口
1
2
3
4
 public interface Iterator {
boolean hasNext();
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
class MyIterator<E> implements Iterator {
E[] e;
public MyIterator(E[] e) {
this.e = e;
}

int index;

@Override
public boolean hasNext() {
if (index < e.length) {
return true;
}
return false;
}

@Override
public Object next() {
if(this.hasNext()){
return e[index++];
}
return null;
}
}
  • 调用
1
2
3
4
5
6
7
public static void main(String[] args) {
String[] str = {"nn", "jj", "PP"};
MyIterator nameRepository = new MyIterator(str);

while (nameRepository.hasNext()) {
System.out.println(nameRepository.next());
}