23 种设计模式中的迭代器模式

提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。

迭代器模式(Iterator )实际上在 Java 的集合类中已经广泛使用了。主要用来提供一种统一的方法来遍历不同的聚合对象。

迭代器模式的核心角色。

  • Iterator(迭代器接口) :定义访问和遍历元素的接口
  • ConcreteIterator(具体迭代器) :实现迭代器接口,负责管理当前元素的位置
  • Aggregate(聚合接口) :定义创建相应迭代器对象的接口
  • ConcreteAggregate(具体聚合) :实现聚合接口,返回具体迭代器的实例

下面是一个完整的Java迭代器模式示例:

迭代器接口。

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

聚合接口。

java 复制代码
// 聚合接口
interface Container<T> {
    Iterator<T> getIterator();
}

具体聚合类。

java 复制代码
// 具体聚合类
class NameRepository implements Container<String> {
    private List<String> names = new ArrayList<>();
​
    public NameRepository(String[] names) {
        for (String name : names) {
            this.names.add(name);
        }
    }
​
    @Override
    public Iterator<String> getIterator() {
        return new NameIterator();
    }
​
    // 具体迭代器类(内部类)
    private class NameIterator implements Iterator<String> {
        int index = 0;
​
        @Override
        public boolean hasNext() {
            return index < names.size();
        }
​
        @Override
        public String next() {
            if (this.hasNext()) {
                return names.get(index++);
            }
            return null;
        }
    }
}

客户端,测试代码。

java 复制代码
// 客户端代码
public class IteratorPatternDemo {
    public static void main(String[] args) {
        String[] names = {"Robert", "John", "Julie", "Lora"};
        NameRepository nameRepository = new NameRepository(names);
​
        // 获取迭代器
        Iterator<String> iterator = nameRepository.getIterator();
        
        System.out.println("Names in repository:");
        while (iterator.hasNext()) {
            String name = iterator.next();
            System.out.println("Name: " + name);
        }
    }
}

总结

迭代器模式经常被用在遍历集合上,集合通过对外提供统一的Iterator接口来遍历元素,而客户端不需要了解集合内部的数据结构。

在 Java 中,迭代器模式被广泛应用于集合框架中,是处理集合元素遍历的标准方式。

相关推荐
打工仔折腾 AI28 分钟前
后端部署避坑:吃透IPv4地址、网络接口与CIDR前缀的实际应用
arm开发·人工智能·后端·python·性能优化
独泪了无痕9 小时前
Spring Data Redis 快速上手
spring boot·redis·后端
m0_6399069413 小时前
Linux 操作系统入门:目录结构、服务排查常用命令、Shell 脚本基础
linux·运维·后端
holly就是我13 小时前
AI 编程助手为什么跑偏?用开源 ccglass 看清 Prompt、工具调用和 Token 消耗
人工智能·后端
鸿蒙开发13 小时前
共享 Schema 与 SchemaFactory
前端·后端·harmonyos
用户7884773163413 小时前
小程序后端三选一:云开发、.NET WebAPI、Node,我按客户现状分了三种答案
后端
aiopencode13 小时前
局域网设备抓包怎么做?用 TraceEagle 抓电视、游戏机和 IoT 流量
后端·ios
智驭未来掌门人13 小时前
CLion 开发 Qt 项目的优势
后端
EnCi Zheng14 小时前
后端怎么把AI接口稳定安全低成本接进业务:超时重试、密钥隔离与成本熔断清单
人工智能·后端·安全·架构·api
Bazingga14 小时前
从一家酒店讲懂Docker
后端