Java设计模式学习记录-迭代器模式

前言 这次要介绍的是迭代器模式,也是一种行为模式。我现在觉得写博客有点应付了,前阵子一天一篇,感觉这样其实有点没理解透彻就写下来了,而且写完后自己也没有多看几遍,上次在面试的时候被问到java中的I/O的各种实现用到了什么设计模式,我愣是想半天没想出来了,人家还给提示了我也没想出来,最后还是面试官给出的答案,是装饰模式,听到答案后就恍然大悟了,前两天刚看了装饰模式,还写下了I/O操作中的各种类都是用到了装饰模式,后来想想两方面原因造成的当时没回答出来,一是面试时紧张就容易想不起来,二是对设计模式理解的还是不够透彻。所以以后宁可写博客慢一些也要将自己写的东西理解透彻了。 迭代器模式 概念介绍 迭代器模式,又称游标模式。这种模式提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节。这种模式其实我们日常开发中也很常见,例如下面的场景: 复制代码 java.util.Iterator it = list.iterator(); while (it.hasNext()){ //using "it.next();" do some business logic } 复制代码 这样来理解简单一些,下面还是通过具体的场景例子来实现迭代器模式。 举例 一个书架上放着好几本书,现在我想知道书架上都有哪些书,并且都把书名打印出来。那么书架就可以具有迭代的功能,能把它存放的所有书籍都迭代出来。用代码实现如下: 定义一个迭代器接口,包含检测是否还有下一个元素的方法和获得下一个元素的方法 复制代码 /** * 迭代器接口 */ public interface Iterator { /** * 检测是否还有下一个元素 * @return */ public abstract boolean hasNext(); /** * 获得下一个元素 * @return */ public abstract Object next(); } 复制代码 定义含有迭代器对象的接口 复制代码 /** * 只有实现此接口的才可以获得迭代器对象 */ public interface Aggregate { /** * 获得迭代器对象 * @return */ public abstract Iterator iterator(); } 复制代码 书籍类 复制代码 /** * 书籍类 */ public class Book { //书籍名称 private String name = ""; public Book(String name){ this.name = name; } /** * 获得书籍名称 * @return */ public String getName(){ return name; } } 复制代码 书架类 复制代码 /** * 书架类 */ public class BookShelf implements Aggregate{ private Book[] books; private int last = 0; public BookShelf(int maxSize){ this.books = new Book[maxSize]; } /** * 获得书籍 * @param index * @return */ public Book getBookAt(int index){ return books[index]; } /** * 添加书籍 * @param book */ public void appendBook(Book book){ this.books[last] = book; last++; } /** * 获得书架上的书籍数量 * @return */ public int getLength(){ return books.length; } /** * 获得书架迭代器对象 * @return */ @Override public Iterator iterator(){ return new BookShelfIterator(this); } } 复制代码 书架迭代器 复制代码 /** * 书架迭代器 */ public class BookShelfIterator implements Iterator { private BookShelf bookShelf; private int index; public BookShelfIterator(BookShelf bookShelf){ this.bookShelf = bookShelf; this.index = 0; } /** * 检测是否还有下一本书 * @return */ @Override public boolean hasNext() { if(index
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信