当前位置: 首页 > article >正文

行为模式3.迭代器模式

 行为型模式

  1. 模板方法模式(Template Method Pattern)
  2. 命令模式(Command Pattern)
  3. 迭代器模式(Iterator Pattern)
  4. 观察者模式(Observer Pattern)
  5. 中介者模式(Mediator Pattern)
  6. 备忘录模式(Memento Pattern)
  7. 解释器模式(Interpreter Pattern)
  8. 状态模式(State Pattern)
  9. 策略模式(Strategy Pattern)
  10. 职责链模式(Chain of Responsibility Pattern)
  11. 访问者模式(Visitor Pattern)

迭代器模式(Iterator Pattern) 是一种行为型设计模式,它提供一种顺序访问集合对象元素的方式,而不暴露集合的内部结构。迭代器模式允许客户端按顺序访问集合中的元素,而无需直接访问集合本身。通常,当你有一个集合(如列表、队列、栈等),你希望对集合中的元素进行迭代,但又不想暴露其内部结构时,可以使用迭代器模式。

迭代器模式的主要组成部分

  1. Iterator(迭代器):迭代器接口,定义了遍历集合元素的方法,如 hasNext() 和 next()
  2. ConcreteIterator(具体迭代器):实现了Iterator接口,并定义了如何遍历具体集合中的元素。
  3. Aggregate(聚合类,也叫集合类):集合接口,提供创建迭代器对象的方法。
  4. ConcreteAggregate(具体聚合类):实现了Aggregate接口,定义了如何存储和获取集合元素。

迭代器模式的工作流程

  1. 创建迭代器:客户端通过聚合类获取迭代器实例。
  2. 遍历集合:客户端通过迭代器的方法遍历集合中的元素,使用 hasNext() 判断是否有下一个元素,使用 next() 获取当前元素。
  3. 不暴露集合的内部实现:迭代器模式让客户端能够通过标准的接口访问集合元素,而不需要知道集合的内部结构。

迭代器模式的优点

  • 封装性:集合的实现细节对客户端是隐藏的,客户端不需要关心集合如何存储数据。
  • 灵活性:可以对不同的集合类型使用相同的迭代方式。
  • 单一职责:聚合类负责存储数据,迭代器类负责遍历数据,这样做可以避免集合类本身过于复杂。

Java 示例代码

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

// 1. 定义Iterator接口
interface Iterator {
    boolean hasNext();  // 判断是否有下一个元素
    Object next();      // 获取下一个元素
}

// 2. 定义Aggregate接口(集合接口)
interface Aggregate {
    Iterator createIterator();  // 创建一个迭代器
}

// 3. ConcreteIterator(具体迭代器)实现Iterator接口
class ConcreteIterator implements Iterator {
    private List<Object> items;
    private int position = 0;

    public ConcreteIterator(List<Object> items) {
        this.items = items;
    }

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

    @Override
    public Object next() {
        if (this.hasNext()) {
            return items.get(position++);
        }
        return null;
    }
}

// 4. ConcreteAggregate(具体集合类)实现Aggregate接口
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(items);
    }
}

// 5. 客户端使用迭代器遍历集合
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");
        aggregate.addItem("Item 4");

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

        // 使用迭代器遍历集合
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}


http://www.kler.cn/a/468026.html

相关文章:

  • kafka使用以及基于zookeeper集群搭建集群环境
  • TDengine + MQTT :车联网时序数据库如何高效接入
  • Linux:操作系统不朽的传说
  • 汇编环境搭建
  • vscode如何离线安装插件
  • memcached的基本使用
  • rsync命令常用同步方案
  • (leetcode算法题)528. 按权重随机选择
  • 记录一下core-js安装报错(core-js/modules/es.array.push.js core-js/modules/es.error.cause.js)
  • 简历_专业技能_熟悉Redis常用数据结构及其操作命令
  • 现代光学基础4
  • 如何下载 Chrome 历史版本 - 完整指南
  • SwiftUI 撸码常见错误 2 例漫谈
  • EPS32基础篇开发
  • vue 如何实现复制和粘贴操作
  • 获取钉钉微应用免登授权码(h5微应用)
  • 创建.net core 8.0项目时,有个启用原生AOT发布是什么意思
  • Oracle 创建本地用户,授予权限,创建表并插入数据
  • SQL中,# 和 $ 用于不同的占位符语法
  • 在 Python 中合并多个 Word 文档
  • spring防止重复点击,两种注解实现(AOP)
  • [开源]C++代码分享
  • 基于Spring Boot微信小程序的房产交易租赁服务平台
  • 慧集通iPaaS集成平台低代码训练-实践篇
  • 术业有专攻,遨游工业三防手机筑牢“危急特”通信防线
  • Ubuntu离线登入mysql报错缺少libncurses.so.5问题