百度百科:迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
使用Java语言显示数组arr中的元素时,我们可以使用下面的for循环语句遍历数组。
for(int i=0;i<arr.length;i++){ System.out.println(arr[i]); }
请注意这段代码中的循环变量i,该变量的初始值时0,然后会递增为1,2,3,......,程序则在每次i递增后都输出arr[i]。我们在程序中经常会看到这样的for循环语句。
我们将这里的循环变量i的作用抽象化,通用化形成的模式,在设计模式中成为Iterator模式。
Iterator模式用于在数据集合中按顺序遍历集合。英语单词Iterate有反复做某件事情的意思,汉语成为“迭代器”。
下面是一个例子:
书实体类
public class Book { private String name; public Book(String name) { this.name = name; } public String getName() { return name; } }
书架实体类
import java.util.ArrayList; public class BookShelf implements Aggregate { private ArrayList books; public BookShelf(int initialsize) { this.books = new ArrayList(initialsize); } public Book getBookAt(int index) { return (Book)books.get(index); } public void appendBook(Book book) { books.add(book); } public int getLength() { return books.size(); } public Iterator iterator() { return new BookShelfIterator(this); } }
聚合接口
public interface Aggregate { public abstract Iterator iterator(); }
迭代器接口
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; } }
使用迭代器遍历书架上的书
import java.util.*; 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")); bookShelf.appendBook(new Book("East of Eden")); bookShelf.appendBook(new Book("Frankenstein")); bookShelf.appendBook(new Book("Gulliver's Travels")); bookShelf.appendBook(new Book("Hamlet")); Iterator it = bookShelf.iterator(); while (it.hasNext()) { Book book = (Book)it.next(); System.out.println(book.getName()); } } }
运行结果如下
- 热门文章
- Mysql 8.0+开启远程访问
- Vue3+Ts 组合API调用子组件方法
- JAVA生成微信小程序分享海报
- 基于 Vue 实现魔方矩阵排列效果
- JAVA开发微信特约商户进件/提交申请单
- 检查Office(Word/Excel)文档是否需要密码-通...
- Nginx 跨域配置支持
- 微信/v3/merchant/media/upload 网络图片上...
- 简述分布式CAP理论
- Iterator迭代器设计模式
- 我的标签
- JAVA<7>
- Js<4>
- 设计模式<4>
- TS<2>
- nginx<2>
- 微信服务商<2>
- 微信小程序<1>
- Vue<1>
- Vue3<1>
- IPv6<1>
- Apache POI<1>
- Mysql<1>
- rocketmq<1>
- 分布式数据库<1>
- polygon<1>
- 地图<1>
- CAP<1>
- jQuery<1>
- Git<1>
- curl<1>
- 分布式系统<1>
- 设计<0>
- Redis<0>
- HikariCP<0>
- 数据库连接池<0>
- 多线程<0>
- 友情链接
- 江西云戈信息技术