2007-01-16
设计模式之迭代器 Iterator
关键字: 迭代器| 名称 | 说明 |
| Aggregate | 表示已聚合的接口 |
| Iterator | 执行递增,遍历的接口 |
| Book | 表示书籍的类 |
| BookShelf | 表示书架的类 |
| BookShelfIterator | 扫描书架的类 |
| Main | 测试用类 |
Aggregate接口(Aggregate.java)
- public interface Aggregate {
- public abstract Iterator iterator();
- }
Iterator 接口(Iterator.java)
- public interface Iterator {
- public abstract boolean hasNext();
- public abstract Object next();
- }
Book类(Book.java)
- public class Book
- {
- private String name = "";
- public Book(String name) {
- this.name = name;
- }
- public String getName() {
- return name;
- }
- }
BookShelf类(BookShelf.java)
- 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 new BookShelfIterator(this);
- }
- }
BookShelfIterator类
- public class BookShelfIterator implaments Iterator {
- private BookShelf bookShelf;
- private int index;
- public BookShelfIterator (BookShelf boofShelf) {
- 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;
- }
- }
Main.java 测试类
- public class main{
- public static void main(String[] args) {
- BookShelf bookShelf = new BookShelf(2);
- bookShelf.appendBook(new Book("Around the World in 80 days"));
- bookShelf.appendBook(new Book("Bible"));
- Iterator it = bookShelf.iterator();
- while(it.hasNext()) {
- Book book = (Book)it.next();
- System.out.println(""+book.getName());
- }
- }
- }
评论
qingzi2534
2007-01-17
在BoolShelf类中,如果书籍数量超过了最先设定的书架大小,就无法把书放上去了。如果利用java.util.Vector 取代数组,就能把程序改成即使已经超过了书架的承受数量,也能继续加书。
BookShelf.java
Main类
BookShelf.java
import java.util.Vector;
public class BookShelf implements Aggregate {
private Vector books;
public BookShelf(int initialsize) {
this.books = new Vector(initialsize);
}
public Book getBookAt(int index) {
return (Book)books.get(index);
}
public void appendBook(Book book) {
books.add(book);
}
public int getLength() {
return books.size();
}
public Iterator iterator() {
return new BookShelfIterator(this);
}
}
Main类
import java.util.*;
public class Main {
public static void main(String[] args) {
BookShelf bookShelf = new BookShelf(2);
bookShelf.appendBook(new Book("Around the World in 80 days"));
bookShelf.appendBook(new Book("Bible"));
bookShelf.appendBook(new Book("Hello"));
bookShelf.appendBook(new Book("Baby"));
Iterator it = bookShelf.iterator();
//while循环没变
while(it.hasNext()) {
Book book = (Book)it.next();
System.out.println(""+book.getName());
}
}
}- 浏览: 174673 次
- 性别:

- 来自: 烟台

- 详细资料
搜索本博客
我的相册
200804090708271400855637
共 39 张
共 39 张
最近加入圈子
最新评论
-
2007,年终总结
qingzi2534 写道08年一开始计划就完全没有执行,早上起不来,没有时间吃 ...
-- by 刑天战士 -
2007,年终总结
qingzi2534 写道08年一开始计划就完全没有执行,早上起不来,没有时间吃 ...
-- by weiqingfei -
2007,年终总结
08年一开始计划就完全没有执行,早上起不来,没有时间吃早餐,晚上连续熬夜到12点 ...
-- by qingzi2534 -
2007,年终总结
曾经早上8点干起然后干到转钟一直干了半年,最后身体几乎搞垮的人飘过。。。
-- by zhangfeiyu2005 -
2007,年终总结
qingzi2534 写道 每天都要在2点前睡觉 很好奇,到底是几点上班的 ...
-- by fqtrnt






评论排行榜