1.什么是Iterator?
我们都知道,for语句的i++的作用是让循环后i自增1,我们把这种循环变量的作用抽象化,形成一种模式,这种模式就是Iterator(迭代器模式)
2.Iterator模式的角色
说到设计模式,就不能不介绍它的几个重要的角色:
- Iterator(迭代器)
该接口提供hasNext(),next()两个方法。作用是定义按顺序遍历元素。 - Concretelterator(具体的迭代器)
该类实现了Iterator接口,实现了是否包含下一个元素的hasNext()方法和获取下一个元素方法next()。 - Aggregate(集合)
改接口提供一个方法,返回一个迭代器。 - ConcreteAggregate(集合的实现)
改类实现了Aggregate接口,返回一个迭代器(Concretelterator的具体类)。
下面是UML图
3.代码实现
1.Aggregate (集合)
/**
* @projectName javabasic
* @package com.yic.javabasic.iterator
* @interfaceName Aggregate
* @author KimHung Yic
* @description
* @date 2020/8/21 21:15
* @version 1.0
*/
public interface Aggregate {
Iterator iterator();
}
2.BookShelf(集合实现)
/**
* @author KimHung Yic
* @version 1.0
* @projectName javabasic
* @package com.yic.javabasic.iterator
* @className BookShelf
* @description
* @date 2020/8/21 21:23
*/
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;
}
@Override
public Iterator iterator() {
return new BookShelfIterator(this);
}
}
3.Iterator (迭代器)
/**
* @projectName javabasic
* @package com.yic.javabasic.iterator
* @interfaceName Iterator
* @author KimHung Yic
* @description
* @date 2020/8/21 21:20
* @version 1.0
*/
public interface Iterator {
boolean hasNext();
Object next();
}
4.BookShelfIterator(迭代器实现)
/**
* @author KimHung Yic
* @version 1.0
* @projectName javabasic
* @package com.yic.javabasic.iterator
* @className BookShelfIterator
* @description
* @date 2020/8/21 21:27
*/
public class BookShelfIterator implements Iterator{
private BookShelf bookShelf;
private int index;
public BookShelfIterator(BookShelf bookShelf) {
this.bookShelf = bookShelf;
}
@Override
public boolean hasNext() {
return index < bookShelf.getLength();
}
@Override
public Object next() {
Book book = bookShelf.getBookAt(index);
index++;
return book;
}
}
---来自《图解设计模式》
---本人菜鸟一枚,随便记录一下,若有错误,多谢大家指点。