设计模式学习笔记(1)-迭代器模式
最近在看设计模式,今天看的是迭代器Iterator模式,在Java容器部分用的比较多。
个人认为迭代器模式的最大优点在于对使用者隐藏了细节,使遍历,删除等一些操作比较容易。
迭代器模式实现的要点:
1.创建Iterator及Iteratable接口。
2.创建ConcreteIterable类,实现Iterable接口去提供创建Iterator对象的方法。
3.创建ConcreteIterator类,实现Iterator接口去实现hasNext(),next()方法。
下面是我自己参考书本写的一个实验代码:
public interface Iterator<T> { boolean hasNext(); T next(); } public interface Iterable<T> { Iterator<T> iterator(); } public class Book { private String name = ""; public Book(String name) { this.name = name; } public void setName(String name) { this.name = name; } public String getName() { return name; } } public class BookShelf implements Iterable<Book>{ private Book[] books; private int last = 0; public BookShelf(int maxSize){ books = new Book[maxSize]; } @Override public Iterator<Book> iterator() { return new BookShelfIterator(); } private Book getBookAt(int index) { return books[index]; } public void appendBook(Book book) { books[last] = book; last++; } private int getLength(){ return last; } class BookShelfIterator implements Iterator<Book> { private int index = 0; @Override public boolean hasNext() { return index < getLength(); } @Override public Book next() { Book book = getBookAt(index); index++; return book; } } } public class Test { public static void main(String[] args) { BookShelf bookShelf = new BookShelf(100); bookShelf.appendBook(new Book("Algortihm")); bookShelf.appendBook(new Book("The C programing language")); bookShelf.appendBook(new Book("Programmer")); bookShelf.appendBook(new Book("Design Patterns")); Iterator<Book> iterator = bookShelf.iterator(); while(iterator.hasNext()) { Book book = iterator.next(); System.out.println(book.getName()); } } }
需要注意的是next()方法并不是返回下一个元素,而是返回当前的元素,并调整指针位置使其指向下一个元素,创建好Iterator后调用next返回的是第一个元素。