设计模式行为型——迭代器模式
目录迭代器模式的定义迭代器模式的实现迭代器模式角色迭代器模式类图迭代器模式代码实现迭代器模式的特点优点缺点使用场景注意事项迭代器模式的定义迭代器模式Iterator Pattern属于行为型模式其提供一种方法顺序访问一个聚合对象中的各种元素而又不暴露该对象的内部表示即不需要知道集合对象的底层表示。编程环境中非常常用的设计模式。迭代器模式的实现迭代器模式角色抽象迭代器角色Iterator:定义遍历元素所需要的方法通常包含next()、hasNext()、remove()等。具体迭代器角色Concrete Iterator实现迭代器接口中定义的方法完成对聚合对象的遍历记录遍历的当前位置。容器角色(Aggregate)一般是接口定义存储、添加、删除聚合元素以及创建迭代器对象的接口。具体容器角色ConcreteAggregate抽象容器的具体实现类实现抽象容器创建出容器迭代器的对象。迭代器模式类图迭代器模式代码实现抽象迭代器角色package com.common.demo.pattern.iterator; /** * author Evan Walker 昂焱数据: https://www.ayshuju.com * version 1.0 * desc 抽象迭代器角色 抽象迭代器 * date 2023/08/03 22:38:43 */ public interface Iterator { //判断是否还有下一个元素 boolean hasNext(); //获取第一个元素 Object first(); //获取下一个元素 Object next(); }具体迭代器角色package com.common.demo.pattern.iterator; import java.util.List; /** * author Evan Walker 昂焱数据: https://www.ayshuju.com * version 1.0 * desc 具体迭代器角色 对象迭代器 * date 2023/08/03 22:39:30 */ public class ObjectIterator implements Iterator{ private ListObject list; //记录遍历时的位置 private int position 0; public ObjectIterator(ListObject list) { this.list list; } Override public boolean hasNext() { return positionlist.size(); } Override public Object first() { return list.get(0); } Override public Object next() { return list.get(position); } }抽象容器角色package com.common.demo.pattern.iterator; /** * author Evan Walker 昂焱数据: https://www.ayshuju.com * version 1.0 * desc 抽象聚合/容器角色 * date 2023/08/03 22:43:07 */ public interface Aggregate { //添加对象 void addObject(Object object); //移除对象 void removeObject(Object object); //获取迭代器 Iterator getIterator(); }具体容器角色package com.common.demo.pattern.iterator; import java.util.ArrayList; import java.util.List; /** * author Evan Walker 昂焱数据: https://www.ayshuju.com * version 1.0 * desc 具体聚合/容器角色 对象聚合 * date 2023/08/03 22:43:31 */ public class ObjectAggregate implements Aggregate{ private ListObject list new ArrayList(); Override public void addObject(Object object) { list.add(object); } Override public void removeObject(Object object) { list.remove(object); } Override public Iterator getIterator() { return new ObjectIterator(list); } }测试类package com.common.demo.pattern.iterator; /** * author Evan Walker 昂焱数据: https://www.ayshuju.com * version 1.0 * desc 测试类 * date 2023/08/03 22:44:47 */ public class Test { public static void main(String[] args) { //创建聚合对象 ObjectAggregate objectAggregate new ObjectAggregate(); //在聚合对象中填充数据 objectAggregate.addObject(我是好人一号); objectAggregate.addObject(我是好人二号); objectAggregate.addObject(我是好人三号); //获取迭代器 Iterator iterator objectAggregate.getIterator(); //通过迭代器迭代数据 while (iterator.hasNext()){ System.out.println(iterator.next()); } } }测试截图迭代器模式的特点优点简化集合遍历代码迭代器模式可以封装集合对象的遍历过程使得客户端代码更简洁清晰无需关心集合对象的内部表示和遍历方式。支持多种遍历方式通过定义不同的迭代器类可以实现对同一个聚合对象的不同遍历方式灵活地应对不同的需求。封装聚合对象的内部表示迭代器将遍历操作从聚合对象中抽离出来使得聚合对象可以更好地封装自己的内部数据结构。缺点增加了系统复杂性引入迭代器模式将会增加额外的类和接口增加了系统的复杂性和理解难度。需要额外的内存开销每个迭代器对象都需要占用一定的内存空间当迭代器数量较多时会增加系统的内存开销。使用场景需要遍历聚合对象的情况当需要遍历访问一个聚合对象的元素并且对外部隐藏其内部表示时可以考虑使用迭代器模式。需要支持多种遍历方式的情况当同一聚合对象需要支持多种不同的遍历方式时可以使用迭代器模式来实现。注意事项迭代器模式一般包括迭代器接口和具体迭代器实现类以及聚合对象和具体聚合对象类。在使用迭代器模式时需要注意它们之间的关系和协作。聚合对象需要提供创建迭代器对象的接口以便客户端能够获取迭代器对象进行遍历操作。注意迭代器对象的生命周期管理特别是在多线程环境下需要注意迭代器的线程安全性和一致性。考虑迭代器模式的性能影响尤其是对于大规模数据集合的遍历操作需要合理评估迭代器模式的适用性和性能开销。