设计模式(Java)—Iterator模式
程序员文章站
2024-03-17 23:18:46
...
Iterator模式用于在数据集合中按照顺序遍历集合。
一、示例程序
将书(Book)放到书架(BookShelf)中,并将书的名字按顺序显示出来。
Aggregate接口(集合的接口):
package Iterator;
//集合接口、含有遍历器API
//将遍历功能置于Aggregate角色之外
public interface Aggregate {
public abstract Iterator iterator();
}
在此接口中声明的方法只有一个——iterator方法。该方法会生成一个用于遍历集合的迭代器。想要遍历集合中的元素时,可以调用iterator方法来生成一个是实现了Iterator接口的类的实例。
Iterator接口:
package Iterator;
//遍历器接口
public interface Iterator {
public abstract boolean hasNext();
//返回数组的当前元素,并指向数组的下一个元素
public abstract Object next();
}
Book类:
package Iterator;
//书籍类
public class Book {
private String name;
public Book(String name){
this.name = name;
}
public String getName(){
return name;
}
}
BookShelf类:
package Iterator;
import java.util.ArrayList;
//书架类、实现集合接口、实现遍历器API方法,
public class BookShelf implements Aggregate {
// private Book[] books;
private ArrayList<Book> books;
private int last = 0;
//构造方法、初始化数组
// public BookShelf(int maxsize){
// this.books = new Book[maxsize];
// }
// //获取指定index处的书籍名称
// public Book getBookAt(int index){
// return books[index];
// }
// //向书架中添加书籍
// public void appendBook(Book book){
// this.books[last] = book;
// last++;
// }
public BookShelf(int maxsize){
this.books = new ArrayList<Book>();
}
//获取指定index处的书籍名称
public Book getBookAt(int index){
return books.get(index);
}
//向书架中添加书籍
public void appendBook(Book book){
this.books.add(last, book);;
last++;
}
//获取书架中的书本数
public int getLength(){
return last;
}
//重写遍历器方法、创建遍历器接口的实现类
@Override
public Iterator iterator() {
// TODO Auto-generated method stub
return new BookShelfIterator(this);
}
}
由于需要将该类作为集合进行处理,因此它实现了Aggregate接口。BookShelf类中还实现了Aggregate接口的iterator方法。
BookShelfIterator类
package 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() {
// TODO Auto-generated method stub
if(index < bookShelf.getLength()){
return true;
}else{
return false;
}
}
//返回当前元素,指向下一元素
@Override
public Object next() {
// TODO Auto-generated method stub
Book book = bookShelf.getBookAt(index);
index++;
return book;
}
}
注:因为BookShelfIterator类需要发挥Iterator的作用,所以它实现了Iterator接口。
next方法会返回迭代器当前指向的书(Book实例),并让迭代器指向下本书。
Main类:
package Iterator;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
//初始化容量为4的书架
BookShelf bookShelf = new BookShelf(4);
//向书架中添加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"));
bookShelf.appendBook(new Book("Elemen"));
//创建书架的遍历器
Iterator it = bookShelf.iterator();
//遍历书架,并返回书籍名称
while(it.hasNext()){
Book book = (Book)it.next();
System.out.println(book.getName());
}
}
}
上一篇: (递归)二分查找算法python
下一篇: 算法入门——插入排序和归并排序