迭代器模式,也叫游标模式,属于行为型设计模式。
迭代器模式类图利用迭代器模式定义一个迭代器,迭代器元素定义为泛型,存储元素的凑集利用List。例如:利用书本类(书名及价格)作为迭代器元素,聚合类含有添加元素、删除元素方法,并返回迭代器工具。末了利用迭代器对List凑集进行遍历。

/ 抽象迭代器角色:迭代器接口 /public interface Iterator<E> { / 是否有下一个元素 @return / boolean hasNext(); / 获取下一个元素 @return / E next(); / 获取第一个元素 @return / E first(); / 获取末了一个元素 @return / E last();}
/ @ClassName BookIterator @Description: 详细迭代器角色:数组迭代器 @Author ford @Date 2021/6/9 @Version V1.0 /public class MyIterator<E> implements Iterator<E> { // 存放工具的数组 private List<E> list; // 当前索引所在的下标位置 private int position = 0; / 初始化list凑集数据 @param list / public MyIterator(List<E> list) { this.list = list; } / 判断是否有下一个元素 @return / @Override public boolean hasNext() { return list.size() > position; } / 获取下一个元素工具 @return / @Override public E next() { E e = list.get(position); position++; return e; } / 获取第一个元素工具 @return / @Override public E first() { return list.get(0); } / 获取末了一个元素工具 @return / @Override public E last() { if (list.size() == 0) { return null; } return list.get(list.size() - 1); }}
/ 抽象聚合角色:聚合接口 /public interface Aggregate<E> { / 向凑集中添加一个元素 @param e / void add(E e); / 从凑集中删除一个元素 @param e / void remove(E e); / 返回一个迭代器工具 @return / Iterator<E> createMyIterator();}
/ @ClassName MyAggregate @Description: 详细聚合角色:实现聚合功能(添加元素、删除元素、返回迭代器工具等) @Author ford @Date 2021/6/11 @Version V1.0 /public class MyAggregate<E> implements Aggregate<E> { // 凑集工具 private List<E> list = new ArrayList<>(); / 添加元素 @param e / @Override public void add(E e) { list.add(e); } / 删除元素 @param e / @Override public void remove(E e) { list.remove(e); } / 返回一个迭代器工具 @return / @Override public Iterator<E> createMyIterator() { return new MyIterator<>(list); }}
/ @ClassName Book @Description: 书本类,充当元素工具 @Author ford @Date 2021/6/11 @Version V1.0 /public class Book { private String name; private Double price; public Book(String name, Double price) { this.name = name; this.price = price; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } @Override public String toString() { return "Book{" + "name='" + name + '\'' + ", price=" + price + '}'; }}
迭代器模式客户端测试
/ @ClassName Client @Description: 迭代器模式客户端测试类 @Author ford @Date 2021/6/11 @Version V1.0 /public class Client { public static void main(String[] args) { //构建聚合工具 Aggregate<Book> aggregate = new MyAggregate<>(); //添加书本工具 aggregate.add(new Book("打算机根本",80.00)); aggregate.add(new Book("java编程",60.00)); aggregate.add(new Book("python入门",50.00)); aggregate.add(new Book("PHP从入门到放弃",30.00)); //获取迭代器工具 Iterator<Book> iterator = aggregate.createMyIterator(); //打印第一本书 System.out.println("打印第一本书: "+iterator.first()); //打印末了一本书 System.out.println("打印末了一本书: "+iterator.last()); // 循环打印书本信息 while (iterator.hasNext()){ System.out.println(iterator.next()); } }}
打印第一本书: Book{name='打算机根本', price=80.0}打印末了一本书: Book{name='PHP从入门到放弃', price=30.0}Book{name='打算机根本', price=80.0}Book{name='java编程', price=60.0}Book{name='python入门', price=50.0}Book{name='PHP从入门到放弃', price=30.0}Process finished with exit code 0
迭代器模式小结
本章分享了迭代器模式,紧张先容了迭代器模式的定义、类图、角色及优缺陷,并以书本作为迭代器元素需求为例进行代码实现。
若本文使你受益,还请给予关注、点赞、转发,欢迎拍砖!
!
!