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

迭代器模式(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.Iteratorjava.util.Enumeration 是迭代器模式的典型实现,用于遍历集合类(如ListSetMap)。

例如:

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全栈学习路线、学习资源和面试题一条龙

软考证书=职称证书?

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

相关推荐
三金C_C2 小时前
单例模式解析
单例模式·设计模式·线程锁
ShareBeHappy_Qin4 小时前
设计模式——设计模式理念
java·设计模式
木子庆五6 小时前
Android设计模式之代理模式
android·设计模式·代理模式
前端_ID林8 小时前
前端必须知道的设计模式
设计模式
麦客奥德彪10 小时前
设计模式分类与应用指南
设计模式
小宋要上岸10 小时前
设计模式-单例模式
单例模式·设计模式
程序员JerrySUN11 小时前
设计模式 Day 1:单例模式(Singleton Pattern)详解
单例模式·设计模式
古力德13 小时前
代码重构之[过长参数列表]
设计模式·代码规范
OpenSeek15 小时前
【设计模式】面向对象的设计模式概述
设计模式·c#·设计原则
十五年专注C++开发16 小时前
设计模式之适配器模式(二):STL适配器
c++·设计模式·stl·适配器模式·包装器