文章目录
- Java 设计模式之迭代器模式
- 概述
- UML
- 代码实现
- Java的迭代器
Java 设计模式之迭代器模式
概述
- 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
UML
- Iterator:迭代器接口,定义遍历方法。
- ConcreteIterator:具体迭代器类,实现迭代器接口,负责遍历聚合对象中的元素。
- Aggregate:聚合接口,定义创建迭代器方法。
- ConcreteAggregate:具体聚合类,实现聚合接口,负责存储数据和创建迭代器对象。
代码实现
定义迭代器接口:
public interface Iterator<T> {
boolean hasNext();
T next();
}
定义具体迭代器类:
public class BookIterator implements Iterator<String> {
private ArrayList<String> bookList;
private int position = 0;
public BookIterator(ArrayList<String> bookList) {
this.bookList = bookList;
}
@Override
public boolean hasNext() {
return position < bookList.size();
}
@Override
public String next() {
if (hasNext()) {
return bookList.get(position++);
}
return null;
}
}
定义聚合接口:
public interface Aggregate<T> {
Iterator<T> createIterator();
}
定义具体聚合类:
public class BookCollection implements Aggregate<String> {
private ArrayList<String> bookList = new ArrayList<>();
public void addBook(final String book) {
bookList.add(book);
}
@Override
public Iterator<String> createIterator() {
return new BookIterator(bookList);
}
}
使用:
public class Client {
public static void main(String[] args) {
BookCollection bookCollection = new BookCollection();
bookCollection.addBook("西游记");
bookCollection.addBook("水浒传");
bookCollection.addBook("红楼梦");
bookCollection.addBook("三国演义");
Iterator<String> iterator = bookCollection.createIterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
输出:
西游记
水浒传
红楼梦
三国演义
Java的迭代器
Java 提供了迭代器的相关接口:
// java.util.Iterator.java
public interface Iterator<E> {
boolean hasNext();
E next();
}
// java.util.ListIterator.java
public interface ListIterator<E> extends Iterator<E> {
boolean hasNext();
E next();
boolean hasPrevious();
E previous();
}