掌握设计模式--迭代器模式

迭代器模式(Iterator Pattern)

迭代器模式(Iterator Pattern)是一种行为设计模式,用于在不暴露对象内部表示的情况下顺序访问集合对象的元素。它提供了一种统一的方式来遍历集合元素,而无需了解集合的底层实现。

核心思想是分离集合对象的遍历行为,将遍历逻辑封装在迭代器中,从而为不同集合提供一致的遍历接口。

主要组成部分

  • Iterator(迭代器接口)

    定义访问和遍历元素的接口,例如hasNext()和next()方法。

  • Concrete Iterator(具体迭代器)

    实现Iterator接口,负责具体集合的遍历逻辑。

  • Aggregate(聚合接口)

    定义创建迭代器对象的方法,如createIterator()。

  • Concrete Aggregate(具体聚合类)

    实现聚合接口,返回具体的迭代器实例,并存储集合的元素。

案例实现

一个简单的迭代器模式实现,使用聚合类为自定义集合。为了简化代码,聚合类本质是List集合。

案例类图

聚合接口

java 复制代码
public interface Aggregate<T> {
    Iterator<T> createIterator();
}

具体聚合类

为了简化代码,直接使用List 集合

java 复制代码
public class ConcreteAggregate<T> implements Aggregate<T> {
    private final List<T> items = new ArrayList<>();

    public void add(T item) {
        items.add(item);
    }

    @Override
    public Iterator<T> createIterator() {
        return new ConcreteIterator<>(items);
    }
}

迭代器接口

java 复制代码
// 迭代器接口
public interface Iterator<T> {
    boolean hasNext();
    T next();
}

具体迭代器类

List 集合的迭代器简易实现

java 复制代码
public class ConcreteIterator<T> implements Iterator<T> {
    private final List<T> items;
    private int position = 0;

    public ConcreteIterator(List<T> items) {
        this.items = items;
    }

    @Override
    public boolean hasNext() {
        return position < items.size();
    }

    @Override
    public T next() {
        if (!hasNext()) {
            throw new NoSuchElementException();
        }
        return items.get(position++);
    }
}

测试代码

java 复制代码
public class IteratorDemo {
    public static void main(String[] args) {
        ConcreteAggregate<String> aggregate = new ConcreteAggregate<>();
        aggregate.add("Item 1");
        aggregate.add("Item 2");
        aggregate.add("Item 3");

        System.out.println("遍历集合元素:");
        Iterator<String> iterator = aggregate.createIterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

测试结果

复制代码
遍历集合元素:
Item 1
Item 2
Item 3

优缺点和使用场景

优点

  • 支持多种遍历方式:可以实现不同的迭代逻辑,例如正序、倒序、条件过滤等;
  • 隐藏集合的内部实现:迭代器通过抽象集合的底层逻辑,实现集合元素的访问,而用户无需关心集合的底层结构;
  • 提供统一接口:方便替换或扩展集合类型。

缺点

  • 类的数量增加:迭代器服务于特定的集合,需要为每个集合实现具体的迭代器;
  • 可能影响性能:为每次遍历创建新的迭代器对象,增加了开销。

使用场景

  • 需要访问一个集合对象的内容,但不希望暴露其内部表示

  • 需要支持多种方式遍历集合

  • 需要为不同集合类型提供一致的遍历接口

Java 标准库中的迭代器模式

在 Java 中,java.util.Iterator 和 java.util.Enumeration 是迭代器模式的典型实现,用于遍历集合类(如List、Set和Map)。

例如:

java 复制代码
List<String> list = Arrays.asList("A", "B", "C");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

总结

迭代器模式是一种行为设计模式,其核心在于通过提供一个迭代器对象,将聚合对象(如集合)的遍历行为与其内部表示分离,使得客户端能够以一致的方式访问聚合对象中的元素,而无需了解其底层实现,支持多种遍历方式且不影响集合对象的封装性。

需要查看往期设计模式文章的,可以在个人主页中或者文章开头的集合中查看,可关注我,持续更新中。。。


超实用的SpringAOP实战之日志记录

2023年下半年软考考试重磅消息

通过软考后却领取不到实体证书?

计算机算法设计与分析(第5版)

Java全栈学习路线、学习资源和面试题一条龙

软考证书=职称证书?

软考中级--软件设计师毫无保留的备考分享

相关推荐
是2的10次方啊23 分钟前
设计模式与生活⑭:一栋楼,共用一份热
设计模式
是2的10次方啊1 天前
设计模式与生活⑬:你坐几号线,谁来运营是另一回事
设计模式
Tt有了t2 天前
设计模式速查
java·python·设计模式
一条Go2 天前
四个进程,一把锁:Alioth 的告警评测为什么不需要消息队列
后端·设计模式·架构
一缕82年的清风2 天前
被中产唾弃的“十元快剪”,藏着最狠的极客工程学
人工智能·设计模式
是2的10次方啊2 天前
设计模式与生活⑫:周报又到手,别从空白开始
设计模式
拆房老料3 天前
DeepSeek Super-agent 架构解析:从单任务 Agent 到持续运行的任务系统
人工智能·设计模式·系统架构
工一木子3 天前
设计模式与生活⑩:地铁没变,你换了个状态
设计模式
是2的10次方啊3 天前
设计模式与生活⑪:地铁里被打扰,别总靠自己硬扛
设计模式
高晶4 天前
SPMI 控制器 RTL 设计与验证新手入门
设计模式·程序员·架构