Java设计模式之—Iterator模式(迭代器模式)
直接上代码,只是个人学习记录。
本文最后有本人对迭代器模式的个人理解,请斧正。
Iterator类(接口类)
public interface Iterator {
public abstract boolean hasNext();
public abstract Object next();
}
BookShelfIterator类(实现Iterator接口类)
import java.util.Iterator;
public class BookShelfIterator implements Iterator {
/*
* 此处的对象,类型如BookShelf bookShelf,根据实际需要定义
* 下面代码亦是
*/
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;
}
}
Aggregate类(接口类)
import java.util.Iterator;
public interface Aggregate {
public abstract Iterator iterator();
}
BookShelf类(实现Aggregate接口类)
import java.util.ArrayList;
import java.util.Iterator;
public class BookShelf implements Aggregate {
private ArrayList list = new ArrayList();
private int last = 0;
public Book getBookAt(int index) {
return (Book) list.get(index);
}
public void appendBook(Book book) {
list.add(book);
last++;
}
public int getLength() {
return list.size();
}
@Override
public Iterator iterator() {
return new BookShelfIterator(this);
}
}
Book类(实体类)
public class Book {
private String name;
public String getName() {
return name;
}
public Book(String name) {
this.name = name;
}
}
Main类(测试类)
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
BookShelf bookShelf=new BookShelf();
bookShelf.appendBook(new Book("1"));
bookShelf.appendBook(new Book("2"));
bookShelf.appendBook(new Book("3"));
bookShelf.appendBook(new Book("4"));
Iterator iterator=bookShelf.iterator();
while (iterator.hasNext()) {
Book book=(Book) iterator.next();
System.out.println(book.getName());
}
}
}
个人理解
迭代器模式将存储数据和遍历数据的职责分离,将遍历数据的责任交给类中特定的接口对外展示,无须暴露该对象的内部表示,保证了数据的安全性。
如何实现迭代器模式呢?我们主要解决的问题在于将在元素之间游走的责任交给迭代器,而不是聚合对象。
创建一个Iterator接口,将所需要用到迭代的方法写入,如hasNext()与next();
具体实现交给具体的迭代类去实现。
最后只需在类中调用具体的迭代类就可实现迭代器模式。
BookShelf类中
@Override
public Iterator iterator() {
return new BookShelfIterator(this);
}
若写的不好,请斧正。