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

行为型模式 - 迭代器模式 (Iterator Pattern)

行为型模式 - 迭代器模式 (Iterator Pattern)

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


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

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

// 集合接口
interface Aggregate<T> {
    Iterator<T> createIterator();
}

// 自定义集合类
class CustomList<T> implements Aggregate<T> {
    private List<T> items = new ArrayList<>();

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

    @Override
    public Iterator<T> createIterator() {
        return new CustomListIterator<>(items);
    }
}

// 自定义迭代器类
class CustomListIterator<T> implements Iterator<T> {
    private List<T> items;
    private int position = 0;

    public CustomListIterator(List<T> items) {
        this.items = items;
    }

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

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

// 客户端代码
public class CustomListExample {
    public static void main(String[] args) {
        CustomList<String> list = new CustomList<>();
        list.add("苹果");
        list.add("香蕉");
        list.add("橙子");

        Iterator<String> iterator = list.createIterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

在JDK源码中, 例如 ArrayList 的 Iterator
List: 抽象聚合类
ArrayList: 具体聚合类
Iterator: 抽象迭代器
list.iterator(): 返回的是实现了 Iterator 接口的具体迭代器

相关文章:

  • SpringCloud + Spring AI Alibaba 整合阿里云百炼大模型
  • 【大模型】大模型推理部署工具之vLLM的使用(1)
  • 在Nginx上配置并开启WebDAV服务的完整指南
  • AI赋能教育:用智能体点亮教育的温度
  • 【Python】OpenCV算法使用案例全解
  • 【Java】JDK17新特性
  • C++函数重载
  • 大白话React第十一章React 相关的高级特性以及在实际项目中的应用优化
  • 服务器虚拟化:释放计算潜力的魔法
  • Vscode 便用快捷键设置教程
  • 蓝桥杯备考:动态规划入门题目之下楼梯问题
  • YOLOv8目标检测推理流程及C++代码
  • Android6到Android15版本新增的功能和api
  • Docker项目部署-部署前端
  • 深入解析JasperReports模板标签构建高效报表的利器系列一
  • 1985-2019年上市公司绿色专利申请量数据
  • 云服务培训四-网络服务
  • python---‘DataFrame‘ object has no attribute ‘read‘ 报错的解决
  • 牛客周赛83:A:JAVA
  • 面试题:说一下你对DDD的了解?
  • 前端网站开发工具/广州疫情最新消息今天封城了
  • 做网站如何下载别人网站图片/深圳网站设计公司排行
  • 东台专业做网站的公司/国家免费技能培训官网
  • wordpress360网站卫士/关键词优化方法
  • 上海企业网站模板建站费用/产品网络营销策划方案
  • 天津品牌网站建设/肇庆网站建设制作