魔术桌
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • DesignPattern - 迭代器模式

文章摘要: 迭代器模式使用总结。

简介

简要说明

  • 迭代器模式(Iterator Pattern)是一种行为型设计模式。
  • 允许客户端通过一个统一的接口遍历聚合对象中的元素,而无需关心聚合对象的内部结构。

主要功能

  • 提供一种方法顺序访问一个聚合对象中各个元素,而不暴露其内部的表示。
  • 支持对聚合对象的多种遍历方式。
  • 为遍历不同的聚合结构提供一个统一的接口。

注意事项

  • 迭代器模式可能会增加系统的复杂性,因为需要定义额外的迭代器接口和实现。
  • 在某些情况下,迭代器可能会造成遍历过程中的性能问题。

适用场景

  • 当需要访问一个聚合对象的内容,而不暴露其内部表示时。
  • 当需要支持对聚合对象的多种遍历方式时。
  • 当需要为遍历不同的聚合结构提供一个统一的接口时。

Java 8

案例

import java.util.*;

// 迭代器接口
interface Iterator {
    boolean hasNext();
    Object next();
}

// 聚合接口
interface Aggregate {
    Iterator createIterator();
}

// 具体的聚合类
class ConcreteAggregate implements Aggregate {
    private List<Object> items = new ArrayList<>();

    public void addItem(Object item) {
        items.add(item);
    }

    @Override
    public Iterator createIterator() {
        return new ConcreteIterator(this);
    }

    // 内部类,具体的迭代器实现
    private class ConcreteIterator implements Iterator {
        private int index;
        private ConcreteAggregate aggregate;

        public ConcreteIterator(ConcreteAggregate aggregate) {
            this.aggregate = aggregate;
            index = 0;
        }

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

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

// 客户端代码
public class IteratorPatternDemo {
    public static void main(String[] args) {
        // 创建具体的聚合对象
        ConcreteAggregate aggregate = new ConcreteAggregate();
        aggregate.addItem("Item 1");
        aggregate.addItem("Item 2");
        aggregate.addItem("Item 3");

        // 通过聚合对象获取迭代器
        Iterator iterator = aggregate.createIterator();

        // 使用迭代器遍历聚合对象中的元素
        System.out.println("Iterating over aggregate:");
        while (iterator.hasNext()) {
            Object item = iterator.next();
            System.out.println(item);
        }
    }
}

注释

  • 在这个例子中,Iterator接口定义了遍历聚合对象所需的方法:hasNext()用于判断是否还有下一个元素,next()用于获取下一个元素。
  • Aggregate接口定义了创建迭代器的方法createIterator()。
  • ConcreteAggregate类是具体的聚合类,它内部维护了一个元素列表,并提供了一个方法addItem()用于添加元素。同时,它实现了createIterator()方法,返回一个ConcreteIterator实例。
  • ConcreteIterator是ConcreteAggregate的内部类,实现了Iterator接口。它负责跟踪聚合对象中的当前位置,并提供遍历元素的方法。
  • 在客户端代码IteratorPatternDemo中,我们创建了一个ConcreteAggregate实例,并添加了一些元素。然后,我们通过调用createIterator()方法获取迭代器,并使用它来遍历聚合对象中的所有元素。这样,客户端代码无需关心聚合对象的内部结构,就可以顺序访问其元素。
更新时间: 2025/10/3 17:56