Iterator ------迭代器
来源:互联网 发布:linux复制命令 编辑:程序博客网 时间:2024/05/01 21:38
Iterator ——迭代器
程序示例
Aggregate 接口
// 建立一个可对应聚合的iteratorpublic interface Aggregate { public Iterator Iterator();}
Iterator 接口
public interface Iterator { public boolean hasNext(); public Object next();}
Book 类
public class Book { private String name = ""; public Book(String name) { this.name = name; } public String getName() { return name; }}
BookShelf 类
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 类
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; }}
Main 类
public class Main { public static void main(String[] args) { BookShelf bookShelf = new BookShelf(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")); Iterator iterator = bookShelf.iterator(); while (iterator.hasNext()) { Book book = (Book)iterator.next(); System.out.println("" + book.getName()); } }}
Iterator Pattern 的所有参与者
- Iterator(迭代器) 参与者
- ConcreteIterator(具体迭代器) 参与者
- Aggregate(聚合) 参与者
- ConcreteAggregate(具体聚合) 参与者
扩展自我视野的提示
无论实现结果如何,都能使用Iterator
设计Pattern的目的就是为了提高类的复用率。提高复用率则是指吧类当作一个零件来使用,只要修改某一个零件,就不需要大费周章去修改其他的零件。
抽象类、接口实在很难搞
过度依赖具体类反而会提高类与类的耦合度,增加零部件复用的困难。为了降低耦合度,让类作为零部件再利用,必须引进抽象类和接口的概念。
“下一个”容易搞错
返回现在的元素,同时进行到下一个位置。
练习题
问题1
若书籍数量超过最先设定的书架大小,就无法继续把书放上去。请利用java.util.Vector取代数组,把程序改成即使已经超过书架容量也能继续新增书籍。
答案
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.length; } public Iterator iterator() { return new BookShelfIterator(this); }}
0 0
- Iterator(迭代器)
- Iterator-迭代器
- 迭代器 iterator
- Iterator迭代器
- 迭代器Iterator
- Iterator : 迭代器
- Iterator : 迭代器
- 迭代器Iterator
- 迭代器iterator
- Iterator迭代器
- Iterator迭代器
- iterator (迭代器)
- 迭代器iterator
- 迭代器iterator
- 迭代器 iterator
- 迭代器 Iterator
- 迭代器Iterator
- 迭代器iterator
- 和凉席一起五天自学PHPcms---第一天phpcms的理解与安装
- 很有趣的STL初学资料
- JAVA性能分析之使用火焰图
- android观察者模式
- CSS:两栏布局,三栏布局
- Iterator ------迭代器
- android AP热点(wifi热点)开发
- UIDocumentInteractionController 文档交互控制器 pdf 游览
- 使用夜神模拟器调试HBuilder Android项目
- C# 单元测试EntityFramework中的DbFunctions中的函数
- VR系列——Oculus Publishing文档:七、常见问题
- C语言中的操作符优先级
- 剑指:反转链表
- 给校园招聘中应聘嵌入式程序员的几点建议