23种设计模式(一) —— 手写实现 Iterator模式

for (int i=0;i<arr.length;i++) {

}

这里的循环变量 i 的作用抽象化,通用化后形成的模式,在设计模式中称为 Iterator 模式

用于在数据集合中按照顺序遍历集合,iterator 有反复做某件事的意思,因此称为“迭代器”,所以称为 迭代器模式

1.2 实现 Iterator

我们将实现 一个将书 (Book) 放入书架(BookShelf),并将书的名字按顺序显示出来,因此需要用到如下模块

| 类(接口) | 功能 |

| — | — |

| Aggregate 接口 | 所要遍历的集合的接口,实现该接口的类将成为一个可以多个元素的集合,就像数组一样 |

| Iterator 接口 | 遍历集合的接口 |

| Book 类 | 表示书的类 |

| BookShelf 类 | 表示书架的类 |

| BookShelfIterator | 遍历书架的类 |

| Main | 测试 |

Aggregate 接口

package Iterator;

public interface Aggregate {

// 该方法会生成一个用于遍历集合的迭代器,当需要遍历集合的元素时,可以调用该方法

public abstract Iterator iterator();

}

Iterator 接口

package Iterator;

/**

  • 用于遍历集合中的元素,相当于循环中的循环变量

  • 以下实现了一个最简单的 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;

/**

  • 表示书架的类,改类需要作为集合保存 所有的书籍,因此需要实现 Aggregate 接口

*/

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;

}

// ps 当外部想要遍历书架时,就会调用这个方法:

public Iterator iterator() {

return new BookShelfIterator(this);

}

}

BookShelfIterator 类

package Iterator;

/**

  • 用于遍历书架的 BookShelfIterator 类

  • 该接口要发挥 Iterator 的作用,因此要实现 Iterator接口

*/

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;

}

return false;

}

public Object next() {

Book book = bookShelf.getBookAt(index++);

return book;

}

}

Main

package Iterator;

public class Main {

public static void main(String[] args) {

BookShelf bookShelf = new BookShelf(4);

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值