设计模式笔记:迭代器模式

迭代器模式(Iterator)

迭代器模式一般含有

  • Iterator(迭代器):抽象类(或接口),指定hasNext和next方法,前者用于判断是否存在下一个元素,后者用于获取当前元素并指向下一个元素

  • Aggregate(集合):抽象类(或接口),定义集合的迭代器方法,用于获取集合的一个Iterator(迭代器)类

  • ConcreteAggregate(具体的集合)

  • ConcreteIterator(具体的迭代器)

迭代器模式的类图:

image-20240423202100293

示例程序:遍历书架上的书

  • 类图:

    image-20240423202133975

  • Aggregate接口

     public interface Aggregate
     {
         public abstract Iterator iterator();
     }
  • Iterator接口

     public interface Iterator
     {
         public abstract boolean hasNext();
         public abstract 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;
         }
         public boolean hasNext()
         {
             return index < bookShelf.getLength();
         }
         public Object next()
         {
             Book book = bookShelf.getBookAt(index);
             index++;
             return book;
         }
     ​
     }
  • IteratorMain

     public class IteratorMain
     {
         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());
             }
         }
     }
     ​

迭代器模式的好处:

  • 将遍历与实现分离开来,将遍历功能置于Aggregate角色之外。Main中的while循环并不依赖于BookShelf的实现。如果后期改用Vector来代替现在的数组管理书本,可以很方便地修改少部分代码(BookShelf类的getBookAt()appendBook()以及构造方法BookShelf())就完成复用。只需要修改实现部分的代码而不需要修改遍历部分的代码。

    修改后的BookShelf

     import java.awt.print.Book;
     import java.util.Vector;
     ​
     public class BookShelf implements Aggregate
     {
         private Vector<Book> books;
         private int last=0;
         public BookShelf(int maxSize)
         {
             this.books=new Vector<>(maxSize);
         }
         public Book getBookAt(int index)
         {
             return books.get(index);
         }
         public void appendBook(Book book)
         {
             books.add(book)
             last++;
         }
         public int getLength()
         {
             return last;
         }
         public Iterator iterator()
         {
             return new BookShelfIterator(this);
         }
     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值