Java 设计模式之迭代器模式

打印 上一主题 下一主题

主题 1955|帖子 1955|积分 5865

Java 设计模式之迭代器模式

概述



  • 迭代器模式(Iterator),提供一种方法次序访问一个聚合对象中的各个元素,而又不袒露该对象的内部表示。
UML




  • Iterator:迭代器接口,定义遍历方法。
  • ConcreteIterator:具体迭代器类,实现迭代器接口,负责遍历聚合对象中的元素。
  • Aggregate:聚合接口,定义创建迭代器方法。
  • ConcreteAggregate:具体聚合类,实现聚合接口,负责存储数据和创建迭代器对象。
代码实现

定义迭代器接口:
  1. public interface Iterator<T> {
  2.     boolean hasNext();
  3.     T next();
  4. }
复制代码
定义具体迭代器类:
  1. public class BookIterator implements Iterator<String> {
  2.     private ArrayList<String> bookList;
  3.     private int position = 0;
  4.     public BookIterator(ArrayList<String> bookList) {
  5.         this.bookList = bookList;
  6.     }
  7.     @Override
  8.     public boolean hasNext() {
  9.         return position < bookList.size();
  10.     }
  11.     @Override
  12.     public String next() {
  13.         if (hasNext()) {
  14.             return bookList.get(position++);
  15.         }
  16.         return null;
  17.     }
  18. }
复制代码
定义聚合接口:
  1. public interface Aggregate<T> {
  2.     Iterator<T> createIterator();
  3. }
复制代码
定义具体聚合类:
  1. public class BookCollection implements Aggregate<String> {
  2.     private ArrayList<String> bookList = new ArrayList<>();
  3.     public void addBook(final String book) {
  4.         bookList.add(book);
  5.     }
  6.     @Override
  7.     public Iterator<String> createIterator() {
  8.         return new BookIterator(bookList);
  9.     }
  10. }
复制代码
利用:
  1. public class Client {
  2.     public static void main(String[] args) {
  3.         BookCollection bookCollection = new BookCollection();
  4.         bookCollection.addBook("西游记");
  5.         bookCollection.addBook("水浒传");
  6.         bookCollection.addBook("红楼梦");
  7.         bookCollection.addBook("三国演义");
  8.         Iterator<String> iterator = bookCollection.createIterator();
  9.         while (iterator.hasNext()) {
  10.             System.out.println(iterator.next());
  11.         }
  12.     }
  13. }
复制代码
输出:
  1. 西游记
  2. 水浒传
  3. 红楼梦
  4. 三国演义
复制代码
Java的迭代器

Java 提供了迭代器的相关接口:
  1. // java.util.Iterator.java
  2. public interface Iterator<E> {   
  3.     boolean hasNext();
  4.     E next();
  5. }
复制代码
  1. // java.util.ListIterator.java
  2. public interface ListIterator<E> extends Iterator<E> {  
  3.     boolean hasNext();
  4.     E next();
  5.     boolean hasPrevious();
  6.     E previous();
  7. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

自由的羽毛

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表