Java设计模式(1)Iterator模式 一个一个遍历
2018-03-02 17:43
681 查看
一、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循环语句。
数组、集合中保存了很多元素,通过指定数组下标,我们可以从中选择任意一个元素。for语句中的i++的作用是让i的值在每次循环后自增1,将这里的循环变量i的作用抽象化,通用化后形成的模式,在设计模式中成为Iterator模式。Iterator模式用户在数据集合中按照顺序遍历集合,单词Iterate有反复做某件事情的意思,汉语成为“迭代器”。
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
Java中的Iterator功能比较简单,并且只能单向移动:
使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
使用next()获得序列中的下一个元素。
使用hasNext()检查序列中是否还有元素。
使用remove()将迭代器新返回的元素删除。
Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。
二、示例程序
1.示例程序类图一览表
类名 | 说明 |
---|---|
Aggregate.java | 表示集合的接口 |
Iterator.java | 遍历集合的接口 |
Book.java | 表示书本的类 |
BookShelf.java | 表示书架的类 |
BookShelfIterator.java | 遍历书架的类 |
Main.java | 测试示例程序的主类 |
2.示例程序的类图
3.Aggregate接口
public interface Aggregate { /** * 在Aggregate接口中声明的方法只有一个,Iterator方法,该方法会生成一个用于遍历集合的迭代器 * 想要遍历集合中的元素时,可以调用iterator方法来生成一个实现了Iterator接口的类的实例。 * @return */ public abstract Iterator iterator(); }
4.Iterator接口
public interface Iterator { /** * 声明了二个方法,判断是否存在下一个元素的hasNext方法,和获取下一个元素的next方法。 * * @return */ public abstract boolean hasNext(); public abstract Object next(); }
5.Book类
public class Book { /** * Book类中声明一个书名的字段 */ private String name; public Book(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
6.BookShelf类
public class BookShelf implements Aggregate { /** * BookShelf类是表示书架的类,由于需要将该类作为集合进行处理,因此它实现了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; } @Override public Iterator iterator() { return new BookShelfIterator(this); } }
7.BookShelfIterator类
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; } } @Override public Object next() { Book book = bookShelf.getBookAt(index); index++; return book; } }
8.Main类
public class Main { public static void main(String[] args) { BookShelf bookShelf = new BookShelf(5); bookShelf.appendBook(new Book("GONE WITH THE WIND")); bookShelf.appendBook(new Book("Romeo and Juliet")); bookShelf.appendBook(new Book("Scarlet and Black")); bookShelf.appendBook(new Book("Bible")); bookShelf.appendBook(new Book("David Copperfield")); Iterator iterator = bookShelf.iterator(); while (iterator.hasNext()) { Book book = (Book) iterator.next(); System.out.println(book.getName()); } } }
9.运行示例程序
GONE WITH THE WIND Romeo and Juliet Scarlet and Black Bible David Copperfield
三、Iterator模式中的角色
1.Iterator(迭代器)
该角色负责定义按顺序逐个遍历元素的接口,在示例程序中Iterator接口是这个角色,它定义了hasNext和next两个方法,hasNext方法用于判断是否存在下一个元素,next方法则用于获取该元素。2.ConcreteIterator(具体的迭代器)
该角色负责实现Iterator角色所定义的接口,在示例程序中,BookShelfIterator接口是这个角色。3.Aggregate(集合)
该角色负责定义创建Iterator角色的接口,这个接口是一个方法,会创建出按顺序访问保存在我内部元素的人,在示例程序中,Aggregate接口是这个角色。4.ConcreteAggregate(具体的集合)
该角色负责实现Aggregate角色所定义的接口,它会创建出具体的Iterator角色,在示例程序中,BookShelf是这个角色。5.Iterator模式的类图
新手一枚,欢迎拍砖~ ~ ~
相关文章推荐
- java设计模式之Iterator模式 ——一个一个遍历
- java 设计模式 Iterator 容器与容器遍历
- JAVA设计模式---Iterator迭代器模式
- 从Java类库看设计模式 (Composite,Strategy,Iterator)
- java设计模式之Iterator
- Java设计模式—迭代器(Iterator)
- Java设计模式-----Iterator迭代器模式
- Java设计模式之Iterator模式介绍
- Java设计模式之Iterator模式
- Java Iterator的设计模式
- 设计模式学习笔记---迭代器模式iterator pattern(Java版)
- JAVA设计模式六:--Iterator(迭代器模式)
- 设计模式 - 迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释
- 学习:java设计模式—Iterator模式
- java设计模式16——迭代子模式(Iterator)
- java设计模式之iterator
- Java设计模式-迭代子模式(Iterator)
- java设计模式--迭代器模式 Iterator,备忘录模式 Memento,中介者模式 Mediator
- Java设计模式之--迭代器模式(Iterator)
- 二十三种设计模式(java版)之Iterator