1、类图关系
2、代码例子
Iterator(迭代器)
package me.jtzen9.iterator;public interface Iterator { boolean hasNext(); Object next();}
Aggregate(集合)
package me.jtzen9.iterator;public interface Aggregate { Iterator iterator();}
Book类,集合存放的元素类
package me.jtzen9.iterator;public class Book { private String name; public Book(String name) { this.name = name; } public String getName() { return name; }}
BookShelf类,即具体集合类
package me.jtzen9.iterator;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); }}
BookShelfIterator类,即具体迭代器类
package me.jtzen9.iterator;public class BookShelfIterator implements Iterator { private BookShelf bookShelf; private int index; public BookShelfIterator(BookShelf bookShelf) { this.bookShelf = bookShelf; this.index = 0; } @Override public boolean hasNext() { return index < bookShelf.getLength(); } @Override public Object next() { Book book = bookShelf.getBookAt(index); index++; return book; }}
测试代码:
package me.jtzen9.iterator;public class IteratorTest { public static void main(String[] args) { BookShelf bookShelf = new BookShelf(4); bookShelf.appendBook(new Book("Around the world in 80 Days")); bookShelf.appendBook(new Book("Bible")); bookShelf.appendBook(new Book("Cinderella")); bookShelf.appendBook(new Book("Daddy-Long-Legs")); Iterator it = bookShelf.iterator(); while (it.hasNext()) { Book book = (Book) it.next(); System.out.println(book.getName()); } }}
3、说明
摘至:【日】结城浩/著,杨文轩/译 .《图解设计模式》 北京:人民邮电出版社. 2017. 13~22