GoF对于设计模式的24种模式之一,就有Iterator模式,就字面意思而言就是迭代器,可以理解成循环。这里有一个实例进行了试验,是做几本书放书架的实现,我们可以想象,如果我们手里有N本书,需要放在书架上,一本接着一本进行放,我们的行为是不断重复的,可以考虑进行循环操作。虽然说java带有迭代器的包,但是本实例是想用迭代的原理进行实现,肯定不能直接使用迭代器,不然就没了实际价值。
虽然这个过程可以采用面向过程进行实现,但学过面向对象的人都知道,面向对象的好处很多,其中一点就是复用性和扩展性好,本实例就是先创建了两个接口(interface)Aggregate和Iterator,该接口里分别装的是抽象方法:迭代器(Iterator iterator)和 hasNext()、next(),这些抽象方法都在另外两个class中进行了重写。详细代码如下:
1.interface Aggregate:
package FFF;
public interface Aggregate {
public abstract Iterator iterator();
}
2.interface Iterator:
package FFF;
public interface Iterator {
public abstract boolean hasNext();
public abstract Object next();
}
3.class Book:
package FFF;
public class Book {
private String name;
public Book(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
4.class BookShelfIterator:
package FFF;
public class BookShelfIterator implements Iterator {
private BookShelf bookShelf;
private int index;
public BookShelfIterator(BookShelf bookShelf) {
this.bookShelf = bookShelf;
this.index = 0;
}
public boolean hasNext() {
if (index < bookShelf.getLength()) {
return true;
} else {
return false;
}
}
public Object next() {
Book book = bookShelf.getBookAt(index);
index++;
return book;
}
}
5.BookShelf:
package FFF;
public class BookShelf implements Aggregate {
private Book[] books;
private int last = 0;
public BookShelf(int maxsize) {
this.books = new Book[maxsize];
}
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);
}
}
6.客户端:
package FFF;
import java.util.*;
public class Main {
public static void main(String[] args) {
BookShelf bookShelf = new BookShelf(10);
bookShelf.appendBook(new Book("《教父》"));
bookShelf.appendBook(new Book("《巨婴国》"));
bookShelf.appendBook(new Book("《心灵的焦灼》"));
bookShelf.appendBook(new Book("《追风筝的人》"));
bookShelf.appendBook(new Book("《一个陌生女人的来信》"));
bookShelf.appendBook(new Book("《激荡中国三十年》"));
bookShelf.appendBook(new Book("《人生》"));
bookShelf.appendBook(new Book("《自私的基因》"));
Iterator it = bookShelf.iterator();
while (it.hasNext()) {
Book book = (Book)it.next();
System.out.println(book.getName());
}
}
}
结果如下:
《教父》
《巨婴国》
《心灵的焦灼》
《追风筝的人》
《一个陌生女人的来信》
《激荡中国三十年》
《人生》
《自私的基因》