首页 > 其他分享 >设计模式-迭代器模式

设计模式-迭代器模式

时间:2025-01-15 09:03:25浏览次数:1  
标签:遍历 聚合 Iterator 迭代 模式 aggregate 设计模式 public

迭代器模式(Iterator Pattern)解释

定义
迭代器模式是一种行为型设计模式,它提供了一种方法来顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。

特点

  • 分离遍历集合与集合本身的实现。
  • 提供一种统一的方式来遍历不同类型的集合。
  • 使得集合的实现和迭代逻辑分离。

迭代器模式的结构

  1. 迭代器接口(Iterator)
    定义访问和遍历元素的方法,例如 hasNext()next()

  2. 具体迭代器(Concrete Iterator)
    实现迭代器接口,负责遍历聚合对象中的元素。

  3. 聚合接口(Aggregate)
    定义创建迭代器的方法,例如 createIterator()

  4. 具体聚合(Concrete Aggregate)
    实现聚合接口,存储元素并提供创建具体迭代器的方法。


示例代码

以下用 Java 示例实现迭代器模式:

1. 定义迭代器接口

public interface Iterator<T> {
    boolean hasNext(); // 是否还有下一个元素
    T next();          // 返回下一个元素
}

2. 定义聚合接口

public interface Aggregate<T> {
    Iterator<T> createIterator(); // 创建迭代器
}

3. 实现具体聚合

import java.util.ArrayList;
import java.util.List;

public class ConcreteAggregate<T> implements Aggregate<T> {
    private List<T> items = new ArrayList<>();

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

    public T getItem(int index) {
        return items.get(index);
    }

    public int size() {
        return items.size();
    }

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

4. 实现具体迭代器

public class ConcreteIterator<T> implements Iterator<T> {
    private ConcreteAggregate<T> aggregate;
    private int currentIndex = 0;

    public ConcreteIterator(ConcreteAggregate<T> aggregate) {
        this.aggregate = aggregate;
    }

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

    @Override
    public T next() {
        return aggregate.getItem(currentIndex++);
    }
}

5. 测试迭代器模式

public class IteratorPatternDemo {
    public static void main(String[] args) {
        // 创建一个具体聚合
        ConcreteAggregate<String> aggregate = new ConcreteAggregate<>();
        aggregate.addItem("Item 1");
        aggregate.addItem("Item 2");
        aggregate.addItem("Item 3");

        // 创建迭代器
        Iterator<String> iterator = aggregate.createIterator();

        // 遍历集合
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

输出结果

Item 1
Item 2
Item 3

迭代器模式的优点

  1. 封装性好:迭代器将集合的遍历逻辑封装起来,用户无需了解集合的内部结构。
  2. 扩展性高:可以为不同的聚合对象提供不同的迭代器实现。
  3. 统一接口:使用统一的接口来遍历不同类型的集合,增强了代码的可复用性。

适用场景

  • 需要遍历一个复杂对象的所有元素而不暴露其内部实现时。
  • 需要提供多种遍历方式(例如前序、中序、后序遍历)的场景。
  • 需要让多个迭代器同时工作在同一个聚合对象上。

通过以上实现,迭代器模式将遍历逻辑与聚合对象的存储逻辑分离,提供了一种优雅的遍历方式,方便代码维护和扩展。

标签:遍历,聚合,Iterator,迭代,模式,aggregate,设计模式,public
From: https://www.cnblogs.com/pangchunlei/p/18672074

相关文章

  • 静态分析在分支开发主干发布模式下的应用
    静态分析在分支开发主干发布模式下的应用在采用分支开发主干发布模式的项目中,静态分析可以有效地确保每次合并到主干的代码质量。以下是具体的操作步骤和措施,确保变更请求经过审批,并在审批过程中检查静态分析的结果。1.配置管理工具和静态分析工具的集成目标确保静态分......
  • 第9章 常用的设计模式
    第9章常用的设计模式9.1聚合组件(aggregatecomponent)聚合组件将多个底层类型集中到一个简化的高层类型中,用于支持常用场景。例如,E-mail组件,把简单邮件传输协议(SMTP)、套接字、编码(encoding)等等集中在一起。聚合组件的目的是提供一个更高层的抽象,便于开发者完成(通常很简......
  • 【Azure Function】C#独立工作模式下参数类型 ServiceBusReceivedMessage 无法正常工
    问题描述在C#AzureFunction使用ServiceBus作为触发器时候,在C#独立工作模式下,说可以支持使用 ServiceBusReceivedMessage类型作为触发消息的参数类型:[Function(nameof(ServiceBusReceivedMessageFunction))][ServiceBusOutput("outputQueue",Connect......
  • 【C++】反向迭代器
    反向迭代器一.源码及框架分析二.反向迭代器实现代码1.ReverseIterator.h2.Vector.h3.List.h4.Test.cpp一.源码及框架分析SGI-STL30版本源代码,反向迭代器实现的核心源码在stl_iterator.h中,反向迭代器是一个适配器,各个容器中再适配出自己的反向迭代器。下面截出vector......
  • 更灵活的对象之间的联动 - 观察者模式(Observer Pattern)
    观察者模式(ObserverPattern)观察者模式(ObserverPattern)观察者模式(ObserverPattern)概述观察者模式(ObserverPattern)结构图观察者模式(ObserverPattern)涉及的角色talkischeap,showyoumycode总结观察者模式(ObserverPattern)观察者模式(ObserverPattern)是一种......
  • Qt/C++ 基于回调模式的海康3D相机开发流程详解(附工程源码、开发文档下载链接)
    本文将基于海康3D相机SDK的回调模式,通过具体代码讲解如何完成从设备初始化到图像采集的完整流程。以下是标准的流程图和具体的开发步骤。一、开发流程概述流程分为以下几个关键步骤:运行环境初始化:调用MV3D_LP_Initialize(),初始化SDK运行环境。设备发现:调用MV3D_LP_Get......
  • 预训练+微调大模型的模式
    预训练模型,微调,大模型,深度学习,自然语言处理,计算机视觉,迁移学习1.背景介绍近年来,深度学习技术取得了飞速发展,特别是大规模预训练模型的出现,为人工智能领域带来了革命性的变革。预训练模型是指在海量数据上进行预训练,学习到通用语言表示或特征的模型。微调则是针对特定任......
  • python与WRF模型联合应用技术、WRF模式前后处理
    当今从事气象及其周边相关领域的人员,常会涉及气象数值模式及其数据处理,无论是作为业务预报的手段、还是作为科研工具,掌握气象数值模式与高效前后处理语言是一件非常重要的技能。WRF作为中尺度气象数值模式的佼佼者,模式功能齐全,是大部分人的第一选择。而掌握模式还只是第一步,将......
  • WPF命令模式深度解析:从RelayCommand到命令自动刷新机制
    引言 在WPF应用程序开发中,命令模式是一个非常重要的设计模式,它帮助我们将UI交互与业务逻辑解耦。本文将深入探讨WPF命令模式的实现机制,特别是通过RelayCommand的实现来理解命令模式的核心概念。 1.命令的基础概念1.1什么是命令?命令是将用户操作(如按钮点击)转换为具体行为......
  • 混合迭代重建
    混合迭代重建(hybrid-IR)是一种CT图像的重建算法,它结合了传统的滤波反投影(FBP)算法和迭代重建技术的优点。以下是对混合迭代重建的详细解释:一、基本原理混合迭代重建的基本思路是首先使用滤波反投影算法(FBP)进行图像的初步重建,然后在此基础上进行迭代修正。迭代过程中,算法会不断比较......