Java设计模式之迭代器模式

迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供一种方法来顺序访问一个容器对象中的各个元素,而无需暴露该容器对象的内部表示。迭代器模式将迭代逻辑封装在一个独立的迭代器对象中,使得可以在不暴露容器内部结构的情况下,通过迭代器按序访问容器中的元素。

迭代器模式的主要参与者包括以下几个角色:

  1. 迭代器(Iterator):定义访问和遍历元素的接口,具备移动到下一个元素、获取当前元素等方法。
  2. 具体迭代器(Concrete Iterator):实现迭代器接口,负责实现具体的迭代逻辑,包括跟踪当前位置、移动到下一个元素、获取当前元素等操作。
  3. 容器(Container):定义创建迭代器的接口,可以是一个集合或聚合对象。
  4. 具体容器(Concrete Container):实现容器接口,负责创建具体迭代器对象。

下面是一个简单的示例,展示了如何使用迭代器模式来遍历一个集合对象中的元素:

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

// 具体迭代器实现
class ConcreteIterator implements Iterator {
    private String[] collection;
    private int position = 0;

    public ConcreteIterator(String[] collection) {
        this.collection = collection;
    }

    public boolean hasNext() {
        return position < collection.length;
    }

    public Object next() {
        if (hasNext()) {
            return collection[position++];
        }
        return null;
    }
}

// 容器接口
interface Container {
    Iterator createIterator();
}

// 具体容器实现
class ConcreteContainer implements Container {
    private String[] collection;

    public ConcreteContainer(String[] collection) {
        this.collection = collection;
    }

    public Iterator createIterator() {
        return new ConcreteIterator(collection);
    }
}

// 使用迭代器遍历集合
public class IteratorPatternExample {
    public static void main(String[] args) {
        String[] collection = { "Apple", "Banana", "Orange", "Grape" };
        Container container = new ConcreteContainer(collection);
        Iterator iterator = container.createIterator();

        while (iterator.hasNext()) {
            Object item = iterator.next();
            System.out.println(item);
        }
    }
}

在上面的示例中,迭代器模式被用于遍历一个包含水果名称的字符串数组。具体迭代器实现类ConcreteIterator负责实现迭代逻辑,而具体容器实现类ConcreteContainer负责创建迭代器对象。通过调用容器的createIterator()方法,可以获取一个迭代器对象,然后使用该迭代器对象遍历容器中的元素。

推荐一个ChatGPT使用渠道:点击直达
相关推荐
驭渊的小故事36 分钟前
MyBatis XML 开发实战:从配置到 CRUD 全解析
xml·java·mybatis
哦虎!5 小时前
【JavaEE】网络初识
java
for_ever_love__6 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
我是人✓7 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
欣栀♡7 小时前
JVM 频繁 Full GC 先看日志括号里的 cause,jstat 的 FGC 在 JDK 8 上会骗人
java·jvm
IT研究室7 小时前
最新计算机毕业设计选题推荐-基于spring boot的葡萄酒文化宣传网站-网站-文档指导-Java-springboot
java·spring boot·课程设计
慧都小项7 小时前
MyEclipse 中创建和测试 JAX-RS REST 接口:从项目配置到 REST Explorer
java·restful·myeclipse·jax-rs
Wang's Blog7 小时前
Java 项目实战: 交友项目 - 入门案例:编写 Dubbo 服务提供者
java·dubbo·交友
秋饼8 小时前
Spring AI 2.0 结构化输出企业级实战:从 BeanOutputConverter 源码到生产级解析容错
java·ai·技术分享·后端开发
摇滚侠8 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记