Java设计模式之迭代器Iterator
迭代器(Iterator)主要解决如何在不提供数据内部构造的情况下遍历数据。JDBC的ResultSet 就是一个迭代器,典型的方法就是:hasNext() 和 next().

// 迭代器接口(也可以直接使用 java.util.Iterator,这里为了模式清晰单独定义)
interface MyIterator<T> {
boolean hasNext();
T next();
}
// 聚合接口(提供创建迭代器的方法)
interface Aggregate<T> {
MyIterator<T> createIterator();
}
// 具体的书籍类
class Book {
private String name;
public Book(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
class BookShelf implements Aggregate<Book> {
private Book[] books;
private int index = 0;
public BookShelf(int maxSize) {
books = new Book[maxSize];
}
public void addBook(Book book) {
if (index < books.length) {
books[index++] = book;
} else {
System.out.println("书架已满,无法添加新书");
}
}
public int getLength() {
return index;
}
@Override
public MyIterator<Book> createIterator() {
return new BookShelfIterator();
}
private class BookShelfIterator implements MyIterator<Book> {
private int cursor = 0;
@Override
public boolean hasNext() {
return cursor < index;
}
@Override
public Book next() {
if (hasNext()) {
return books[cursor++];
}
return null;
}
}
}
// 测试代码
public class IteratorPatternDemo {
public static void main(String[] args) {
BookShelf bookShelf = new BookShelf(4);
bookShelf.addBook(new Book("Java编程思想"));
bookShelf.addBook(new Book("设计模式"));
bookShelf.addBook(new Book("算法导论"));
bookShelf.addBook(new Book("Effective Java"));
MyIterator<Book> iterator = bookShelf.createIterator();
while (iterator.hasNext()) {
Book book = iterator.next();
System.out.println("书籍: " + book.getName());
}
}
}输出结果为:
书籍: Java编程思想
书籍: 设计模式
书籍: 算法导论
书籍: Effective Java
附23种设计模式链接:
创建型模式
- Java设计模式之工厂方法Factory Method
- Java设计模式之创建者Builder
- Java设计模式之抽象工厂模式Abstract Factory
- Java设计模式之单例模式Singleton
- Java设计模式之原型模式Prototype
结构型模式
- Java设计模式之适配器Adapter
- Java设计模式之桥接模式Bridge
- Java设计模式之组合模式Composite
- Java设计模式之装饰模式Decorator
- Java设计模式之外观模式Facade
- Java设计模式之享元模式Flyweight
- Java设计模式之代理模式Proxy