设计模式之迭代器模式(Iterator)
程序员文章站
2021-12-12 11:37:42
Iterator用于在数据集合中按照顺序遍历集合。英文单词Iterate有反复做某件事情的意思...
1.介绍
一个一个遍历
-
定义:
提供一种方法,顺序访问一个集合对象中的各个元素,而不暴露该对象的内部表示 -
适用场景:
访问一个集合对象的内容而无需暴露它的内部表示
为遍历不同的集合结构提供一个统一的接口 -
优点:
分离集合对象的遍历行为 -
缺点:
类的个数成对增加
案例场景
- 遍历书架上的书
类和接口一览表
名字 | 说明 |
---|---|
Aggregate | 表示集合的接口 |
Iterator | 遍历集合的接口 |
Book | 表示书中的类 |
BookShelf | 表示书架的类 |
BookShelfIterator | 遍历书籍的类 |
Main | 测试程序的入口 |
Aggregate
只有一个iterator接口,生成一个用于遍历集合的迭代器
public interface Aggregate {
Iterator iterator();
}
Iterator接口
声明两个方法,hasNext():用于判断是否存在下一个元素,next():获取下一个元素
public interface Iterator<T> {
boolean hasNext();
T next();
}
Book类
书的实体对象,getName 获取书名
public class Book {
private String name;
public Book(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
BookShelf类
表示书架的类,由于该类作为集合进行处理,因此实现Aggregate接口
public class BookShelf implements Aggregate {
private List<Book> books = new ArrayList<Book>();
public Integer length() {
return books.size();
}
public Book get(Integer index) {
return books.get(index);
}
public void add(Book book) {
books.add(book);
}
public Iterator iterator() {
return new BookShelfIterator(this);
}
}
BookShelfIterator类
用于遍历书架上书的类
public class BookShelfIterator implements Iterator<Book> {
private BookShelf bookShelf;
private Integer index;
public BookShelfIterator(BookShelf bookShelf) {
this.bookShelf = bookShelf;
this.index = 0;
}
public boolean hasNext() {
return index < bookShelf.length();
}
public Book next() {
return bookShelf.get(index++);
}
}
Main入口
public class Main {
public static void main(String[] args) {
BookShelf bookShelf =new BookShelf();
bookShelf.add(new Book("Java"));
bookShelf.add(new Book("C++"));
bookShelf.add(new Book("PHP"));
bookShelf.add(new Book("数据结构"));
bookShelf.add(new Book("线性代数"));
Iterator iterator = bookShelf.iterator();
while (iterator.hasNext()){
Book next = (Book) iterator.next();
System.out.println(next.getName());
}
}
}
Iterator模式中各角色的作用
Iterator(迭代器)
该角色责任定义按顺序逐个遍历元素的接口。
程序中,由Iterator接口扮演,定义了hasNext和next两个方法。
Concretelterator(具体的迭代器)
该角色负责实现Iterator角色所定义的接口.该角色包含了遍历集合所必须的信息
Aggregate(集合)
该角色负责定义创建Iterator角色的接口。这个接口是一个方法会创建出一个,按照顺序访问保存在内部元素的信息
ConcreteAggregate(具体集合)
该角色负责实现Aggregate角色所定义的接口。他会创建出具体的Iterator角色,也就是ConcreteIterator,也就是实例中的BookShelf
Iterator 模式的类图
本文地址:https://blog.csdn.net/cen50958/article/details/112254012
上一篇: 常用设计模式思想和设计原则