JAVA设计模式---Iterator迭代器模式

迭代器模式

类似于for循环式的代码段在日常开发过程中是很经常用到的,所有有了Iterator模式。既然简单的for循环能实现,为什么要引入迭代器模式呢?因为Iterator可以跟实现分开,单独进行递增。后面会详细分析。

下面通过一个例子来看一下迭代器模式的使用。例子是一个书架,可以往书架上放书本。

为了使用迭代器模式,我们需要一个迭代器接口Iterator,书架迭代器BookShelfIterator实现这个接口,我们还需要一个Book类,一个书架类BookShelf。

JAVA设计模式---Iterator迭代器模式

类之间的关系如上图显示,下面给出代码。

public interface Aggregate { public abstract Iterator iterator(); } public interface Iterator { public abstract boolean hasNext(); public abstract Object next(); } class BookShelfIterator implements Iterator { private BookShelf bookShelf; private int index; public BookShelfIterator(BookShelf bookShelf) { this.bookShelf = bookShelf; this.index = 0; } @Override public boolean hasNext() { if(index<bookShelf.getLength()) return true; else return false; } @Override public Object next() { Book book = bookShelf.getBookAt(index); index++; return book; } } public class BookShelf implements Aggregate { private Book[] books; private int last = 0; BookShelf(int i) { this.books = new Book[i]; } public Book getBookAt(int index) { return books[index]; } public void appendBook(Book book) { this.books[last] = book; last++; } public int getLength() { return last; } public Iterator iterator() { return new BookShelfIterator(this); } } public class Book { private String name = ""; public Book(String name) { this.name = name; } public String getName() { return name; } } 测试: public static void main(String[] args) { // TODO code application logic here BookShelf bookShelf = new BookShelf(4); bookShelf.appendBook(new Book("Abook")); bookShelf.appendBook(new Book("Bbook")); bookShelf.appendBook(new Book("Cbook")); bookShelf.appendBook(new Book("Dbook")); Iterator it = bookShelf.iterator(); while(it.hasNext()) { Book book = (Book)it.next(); System.out.println(" "+book.getName()); } }


从测试函数中可以看出,BookShelf的遍历并没有用到它实现的方法,这样就完全分隔开来了。