博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Iterator(迭代器)模式
阅读量:6220 次
发布时间:2019-06-21

本文共 2087 字,大约阅读时间需要 6 分钟。

  hot3.png

1、类图关系

输入图片说明

2、代码例子

Iterator(迭代器)

package me.jtzen9.iterator;public interface Iterator {    boolean hasNext();    Object next();}

Aggregate(集合)

package me.jtzen9.iterator;public interface Aggregate {    Iterator iterator();}

Book类,集合存放的元素类

package me.jtzen9.iterator;public class Book {    private String name;    public Book(String name) {        this.name = name;    }    public String getName() {        return name;    }}

BookShelf类,即具体集合类

package me.jtzen9.iterator;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类,即具体迭代器类

package me.jtzen9.iterator;public class BookShelfIterator implements Iterator {    private BookShelf bookShelf;    private int index;    public BookShelfIterator(BookShelf bookShelf) {        this.bookShelf = bookShelf;        this.index = 0;    }    @Override    public boolean hasNext() {        return index < bookShelf.getLength();    }    @Override    public Object next() {        Book book = bookShelf.getBookAt(index);        index++;        return book;    }}

测试代码:

package me.jtzen9.iterator;public class IteratorTest {    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 it = bookShelf.iterator();        while (it.hasNext()) {            Book book = (Book) it.next();            System.out.println(book.getName());        }    }}

3、说明

摘至:【日】结城浩/著,杨文轩/译 .《图解设计模式》 北京:人民邮电出版社. 2017. 13~22

转载于:https://my.oschina.net/jtzen9/blog/909211

你可能感兴趣的文章
Kettle的四大不同环境工具
查看>>
vs2017 vs2013等vs中如何统计整个项目的代码行数
查看>>
AngularJS 1.x系列:AngularJS过滤器(4)
查看>>
注冊(十一)重注冊带有鉴权信息
查看>>
程序猿的量化交易之路(14)--Cointrader数据表(2)
查看>>
mysql string types ---- mysql 字符类型详解
查看>>
OpenGL实现通用GPU计算概述
查看>>
聊聊vue组件开发的“边界把握”和“状态驱动”
查看>>
独立python环境之virtualenv和virtualenvwrapper
查看>>
Android 源代码解析 之 setContentView
查看>>
HorizontalDragLayout-模仿QQclient的Item滑动删除
查看>>
2.6 查询转换
查看>>
[读书笔记]Java类载入过程
查看>>
三星Galaxy Tab S2上市,压制苹果之心凸显
查看>>
PJAX全局无刷新的设置方法~
查看>>
NGINX 配置404错误页面转向
查看>>
『科学计算』通过代码理解线性回归&Logistic回归模型
查看>>
寻找正在连接中的网络连接
查看>>
svn client命令
查看>>
patch 用法
查看>>