Iterator模式

我个人常叫它游标模式,该模式的主要目的就是,顺序访问集合中的各个对象,而又不暴露该对象的内部表示。
使用场景:针对一个集合或是封装了集合的对象,对外界需要提供一个访问该集合或是该集合封装对象的保存的元素时,同时又不希望暴露该集合的内部结构。并且希望支撑根据不同的需求对集合元素进行不同的遍历。
主要的思想就是将集合与集合的遍历操作进行分离。即集合元素负责添加对象和删除对象等等。而遍历操作交给另一个对象。因此很容易想像到使用了组合,即将集合注入到Iterator的实现类当中。
实例:
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); }
}
BookShelf是一个封装了集合的对象,当然如果希望迭代器可以实现动态指定,可以再声明一个迭代器的成员变量。然后注入一个自己想要的迭代器即可。
return new BookShelfIterator(this);将集合对象注入给迭代器。并返回迭代器的实例。
public interface Iterator {
public abstract boolean hasNext();
public abstract Object next();
}

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;
} }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值