0%

设计模式-迭代器模式

迭代器模式(Iterator pattern),属于行为型模式,在隐藏内部对象底层实现的同时,访问和遍历其元素

结构


涉及到了四个角色,Iterator(迭代器)、ConcreteIterator(具体迭代器)、Aggregate(容器)、ConcreteAggregate(具体容器)

迭代器

Iterator,迭代器接口声明了遍历集合的基本操作,是否存在下一个元素,获取下一个元素,示例如下

1
2
3
4
public interface Iterator<E> {
E next();
boolean hasNext();
}

具体迭代器

ConcreteIterator,实现了具体遍历集合的方法,示例如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class StoreIterator implements Iterator<String>{
private String[] books;
private int position = 0;

StoreIterator(String[] books){
this.books = books;
}

@Override
public String next() {
return books[position++];
}

@Override
public boolean hasNext() {
return position != books.length;
}
}

容器

Aggregate,容器接口声明了返回类型必须是Iterator的方法,示例如下

1
2
3
public interface Aggregate<T> {
Iterator<T> iterator();
}

具体容器

ConcreteAggregate,存储元素,内部实现可以是数组、队列、栈、集合、树等数据结构,示例如下

1
2
3
4
5
6
7
8
9
10
public class ConcreteAggregate implements Aggregate<String> {
private String[] books;
ConcreteAggregate(String[] books) {
this.books = books;
}
@Override
public Iterator iterator() {
return new StoreIterator(books);
}
}

客户端

对以上代码进行测试,示例如下

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Client {
public static void main(String[] args) {
String[] books = new String[3];
books[0] = "三国";
books[1] = "水浒";
books[2] = "西游记";
Aggregate<String> aggregate = new ConcreteAggregate(books);
Iterator<String> iterable = aggregate.iterator();
while(iterable.hasNext()){
System.out.println(iterable.next());
}
}
}

output:

1
2
3
三国
水浒
西游记

完整代码

完整代码已上传,项目地址https://github.com/yuan0824/DesignPattern

参考资料