public interface Aggregate {

    //调用iterator方法生成实现Iterator接口的类的实例
public abstract Iterator iterator();
}
public interface Iterator {

    //判断是否存在下个元素的hasNext方法和获取下一个元素的next方法
//hasNext返回boolean类型,因为存在下一个元素的时候返回true,不存在的时候即遍历至集合末尾,返回false
public abstract boolean hasNext(); //返回类型为Object,表明返回的是集合的一个元素,这方法还隐含着将迭代器移动至下一个元素处理。
//隐含是因为Iterator接口只知道方法名,想知道next到底做了什么处理,还需要看实现了Iterator接口的类才能看懂作用
public abstract Object next();
}
public class Book {

    private final String name;

    public Book(String name) {
this.name = name;
}
//通过getName方法获取书的名字,书的名字是外部调用Book类的构造函数并初始化Book类时作为参数传递给Book类 public String getName() {
return name;
}
}
//集合处理该类,实现了Aggregate接口和他的iterator方法
public class BookShelf implements Aggregate{
//定义了books字段,他是Book的数组,数组大小在生成BookShelf的实例的时候被指定
//之所以把books字段设置为private就是为了防止被外部改变
private final 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 appendBooke(Book book) {
this.books[last] = book;
last++;
} public int getLength() {
return last;
} @Override
public Iterator iterator() {
return new BookShelfIterator(this);
}
}
//因为需要发挥Iterator的作用,所以实现了该接口
public class BookShelfIterator implements Iterator {
//bookShelf字段表示BookShelfIterator所要遍历的暑假,index字段表示迭代器当前所指向书的下标
//构造函数会将接收到的BookShelf实例保存在bookShelf字段中,并将index初始化为0
private final BookShelf bookShelf;
private int index; public BookShelfIterator(BookShelf bookShelf) {
this.bookShelf = bookShelf;
this.index = 0;
} @Override
//hasNext方法是Iterator接口中声明的方法,该方法会判断有没有下一本书,悠久返回ture,没有就返回false。
//判断有没有下一本书,只需要比较index和书架中书的总册数(bookShelf.getLength()的返回值)来判断
public boolean hasNext() {
return index < bookShelf.getLength();
} /**
*
* @return
*/
@Override
//next方法会返回迭代器当前所指向的书(Book的实例)。并让迭代器指向下一位本书。先取出book变量做返回值,然后让index指向后面一本书
public Object next() {
Book book = bookShelf.getBookAt(index);
index++;
return book;
} }
public class Main {

    public static void main(String[] args) {
//bookShelf.iterator()得到的it适用于遍历书架的Iterator实例,while部分的条件是it.hasNext(),只要书架上有书就不会停止。程序通过it.hasNext()一本本遍历
BookShelf bookShelf = new BookShelf(4);
bookShelf.appendBooke(new Book("Around the World in 80 Days"));
bookShelf.appendBooke(new Book("Bible"));
bookShelf.appendBooke(new Book("Cinderella"));
bookShelf.appendBooke(new Book("Daddy-Long-Legs"));
Iterator it = bookShelf.iterator();
while (it.hasNext()) {
Book book = (Book) it.next();
System.out.println(book.getName());
}
} }

Java设计模式之Iterator的更多相关文章

  1. Java设计模式之Iterator模式

    分类: [java]2013-07-15 10:58 917人阅读 评论(0) 收藏 举报 所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式.本文以java中的容器为例 ...

  2. Java设计模式(12)迭代模式(Iterator模式)

    上了这么多年学,我发现一个问题,好象老师都很喜欢点名,甚至点名都成了某些老师的嗜好,一日不点名,就饭吃不香,觉睡不好似的,我就觉得很奇怪,你的课要是讲的好,同学又怎么会不来听课呢,殊不知:“误人子弟, ...

  3. Java 设计模式系列(十五)迭代器模式(Iterator)

    Java 设计模式系列(十五)迭代器模式(Iterator) 迭代器模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(interna ...

  4. Java设计模式之行为型模式

    行为型模式共11种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 策略模式:策略模式的决定权在用户,系统本身提供不同 ...

  5. Java学习之Iterator(迭代器)的一般用法 (转)

    迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为"轻量级"对象,因为创建它的代价 ...

  6. JAVA 设计模式 迭代器模式

    用途 迭代器模式 (Iterator) 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 迭代器模式是一种行为型模式. 结构

  7. java提高篇---Iterator

    迭代对于我们搞Java的来说绝对不陌生.我们常常使用JDK提供的迭代接口进行Java集合的迭代. Iterator iterator = list.iterator(); while(iterator ...

  8. Java设计模式学习资源汇总

    本文记录了Java设计模式学习书籍.教程资源.此分享会持续更新: 1. 设计模式书籍 在豆瓣上搜索了一把,发现设计模式贯穿了人类生活的方方面面.还是回到Java与程序设计来吧. 打算先归类,再浏览,从 ...

  9. 【转】Java学习之Iterator(迭代器)的一般用法 (转)

    [转]Java学习之Iterator(迭代器)的一般用法 (转) 迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭 ...

随机推荐

  1. 聊聊SpringBoot | 第一章:快速搭建SpringBoot第一个应用

    快速搭建SpringBoot第一个应用 1.简介 本章仅介绍如何快速搭建第一个SpringBoot应用,细节内容下一章再做讲解,如果有需要,各位可以直接到Spring官网去了解. 从 Spring B ...

  2. 八使用Shell函数

    在Shell脚本中,将一些需要重复使用的操作,定义为公共的语句块,即可称为函数 使用函数的好处? 使脚本代码更简洁,增强易读性 提高Shell脚本的执行效率 函数定义方法 基本格式1 function ...

  3. Django自动化测试平台项目案例

    引言 在项目组待了近半年时间,根据自己的感受和体验,做了一个辅助测试的工具(数据预报平台),主要目的是针对目前项目接口文档缺失,自动化预报脚本无法可视化,资源循环利用,统一管理化. 业务背景 我们项目 ...

  4. 严重 [RMI TCP Connection(3)-127.0.0.1]

    学习Servlet时碰到的一个bug. Connected to server [2017-01-08 04:40:33,100] Artifact jspRun:war exploded: Arti ...

  5. PHP Ajax 跨域问题最佳解决方案 【摘自菜鸟教程】

    PHP Ajax 跨域问题最佳解决方案 分类 编程技术 http://www.runoob.com/w3cnote/php-ajax-cross-border.html 本文通过设置Access-Co ...

  6. 第3章 JDK并发包(五)

    3.3 不要重复发明轮子:JDK的并发容器 3.3.1 超好用的工具类:并发集合简介 JDK提供的这些容器大部分在java.util.concurrent包中. ConcurrentHashMap:这 ...

  7. 基于LNMP架构部署NextCloud私有云盘

    一.NextCloud 概述 云盘这个词无论是做技术出身的朋友还是普通的网民.想必已经听的非常多了.在日常生活当中我们用的最多的云盘莫过于百度网盘了 在前几年百花齐放的网盘市场.到现如今只剩下了百度网 ...

  8. Python socket 基础(Server) - Foundations of Python Socket

    Python socket 基础 Server - Foundations of Python Socket 通过 python socket 模块建立一个提供 TCP 链接服务的 server 可分 ...

  9. 2019SACC中国系统架构师大会 day1总结

    早上:一. 爱奇艺的大数据中台战略: a) 介绍爱奇艺的产业文化.b) 通过大中台,可以进行部分数据的沉淀,用于后续的分析处理等等.. 从数据中台和业务中台,建立一种“苹果园“的生态系统.从原始的长视 ...

  10. java 自学简单框架(反射+注解)

    1.先定义一个学生类 2.再定义一个teacher类(这个是为了练习多个注解,自己练习可以 不写这个) 3.再定义个一个学生老师类(这个是为了最终调用上面的那个学生类做准备) 4.下面开始真正的写框架 ...