目录
第一章 图解设计模式 Iterator模式
简介
程序示例
Iterator模式中的登场角色
Iterator(迭代器)
ConcreteIterator(具体的迭代器)
Aggregate(集合)
ConcreteAggregate(具体的集合)
扩展思路的要点
相关的设计模式
Visitor模式
Composite模式
Factory Method模式
Iterator模式,一个一个的遍历。
for(int i = 0;i
将这里的循环变量i的作用抽象化、通用化形成的模式,在设计模式中称为Iterator模式。
Iterator模式用于在数据集合中按照顺序遍历集合。
Iterator模式又称为“迭代器”模式。
Aggregate接口
Aggregate接口是所要遍历的集合的接口。实现了该接口的类将成为一个可以保存多个
元素的集合,就像数组一样。Aggregate有“使聚集”,“集合”的意思。
public interface Aggregate{
public abstract Iterator iterator();
}
Iterator接口
public interface Iterator{
public abstract boolena hasNext();
public abstract Object next();
}
Book类(在该场景中,Book为集合中的对象,被遍历获取的对象)
public class Book{
private String name;
public Book(String name){
this.name = name;
}
public String getName(){
return name;
}
}
BookShelf类(在该场景中,BookShelf为具体的集合接口的实现类,为Book的载体)
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类(用于遍历BookShelf的迭代器实现类)
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;
}
}
该角色负责定义按顺序逐个遍历元素的接口(API)。
定义了hasNext和next两个方法。
hasNext方法用于判断是否存在下一个元素,next方法用于获取该元素。
该角色负责实现Iterator角色所定义的接口(API)。
该角色中包含了遍历集合所必须的信息。
包含集合对象以及指向集合对象中元素的下标index字段。
该角色负责定义创建Iterator角色的接口(API)。
定义了iterator方法。
该角色负责实现Aggregate角色所定义的接口(API)。
它会创建出具体的Iterator角色,即ConcreteIterator橘色。
不管实现如何变化,都可以使用Iterator
难以理解抽象类和接口(不要只使用具体类来编程,要优先使用抽象类和接口来编程)。
Aggregate和Iterator的对应
容易弄错“下一个”
next方法:返回当前元素,并指向下一个元素
还容易弄错最后一个
hasNext方法:确认接下来是否可以调用next方法
多个Iterator,可以针对一个ConcreteAggregate角色编写多个ConcreteIterator角色
迭代器的种类多种多样
从最后开始向前遍历
既可以从前向后遍历,也可以从后向前遍历(既有next方法,也有previous方法)
指定下标进行“跳跃式”遍历
Iterator模式是从集合中一个一个取出元素进行遍历,但并没有在Iterator接口中声明对取出的元素进行何种处理。
Visitor模式则是在遍历元素集合的过程中,对元素进行相同的处理。
Composite模式是具有递归结构的模式,在其中使用Iterator模式比较困难。
在iterator方法中生成Iterator的实例可能会使用Factory Method模式。