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

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

软考证书=职称证书?

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

相关推荐
静水流深_沧海一粟6 小时前
04 | 别再写几十个参数的构造函数了——建造者模式
设计模式
StarkCoder6 小时前
从UIKit到SwiftUI的迁移感悟:数据驱动的革命
设计模式
阿星AI工作室13 小时前
给openclaw龙虾造了间像素办公室!实时看它写代码、摸鱼、修bug、写日报,太可爱了吧!
前端·人工智能·设计模式
_哆啦A梦1 天前
Vibe Coding 全栈专业名词清单|设计模式·基础篇(创建型+结构型核心名词)
前端·设计模式·vibecoding
阿闽ooo5 天前
中介者模式打造多人聊天室系统
c++·设计模式·中介者模式
小米4965 天前
js设计模式 --- 工厂模式
设计模式
逆境不可逃5 天前
【从零入门23种设计模式08】结构型之组合模式(含电商业务场景)
线性代数·算法·设计模式·职场和发展·矩阵·组合模式
驴儿响叮当20105 天前
设计模式之状态模式
设计模式·状态模式
电子科技圈5 天前
XMOS推动智能音频等媒体处理技术从嵌入式系统转向全新边缘计算
人工智能·mcu·物联网·设计模式·音视频·边缘计算·iot
徐先生 @_@|||5 天前
安装依赖三方exe/msi的软件设计模式
设计模式