Iterator模式的java小例項(陣列版)
阿新 • • 發佈:2018-12-23
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());
}
}
}
結果如下:
《教父》
《巨嬰國》
《心靈的焦灼》
《追風箏的人》
《一個陌生女人的來信》
《激盪中國三十年》
《人生》
《自私的基因》