• 设计模式 - 迭代器模式


    目录

    一. 前言

    二. 实现

    三. 优缺点


    一. 前言

        迭代器模式是一种行为型设计模式,它提供了一种统一的方式来访问集合对象中的元素,而不暴露集合内部的表示方式。简单地说,就是将遍历集合的责任封装到一个单独的对象中,我们可以按照特定的方式访问集合中的元素。

    二. 实现

    Aggregate 是聚合类,其中 createIterator() 方法可以产生一个 Iterator;
    ConcreteAggregate(具体聚合器):就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。
    Iterator 主要定义了 hasNext() 和 next() 方法。
    ConcreteIterator(具体迭代器):它是实现迭代器接口的具体实现类,负责具体的遍历逻辑。它保存了当前遍历的位置信息,并可以根据需要向前或向后遍历集合元素。
    Client 组合了 Aggregate,为了迭代遍历 Aggregate,也需要组合 Iterator。

    1. public interface Aggregate {
    2. Iterator createIterator();
    3. }
    4. public class ConcreteAggregate implements Aggregate {
    5. private Integer[] items;
    6. public ConcreteAggregate() {
    7. items = new Integer[10];
    8. for (int i = 0; i < items.length; i++) {
    9. items[i] = i;
    10. }
    11. }
    12. @Override
    13. public Iterator createIterator() {
    14. return new ConcreteIterator(items);
    15. }
    16. }
    1. public interface Iterator {
    2. Item next();
    3. boolean hasNext();
    4. }
    5. public class ConcreteIterator implements Iterator {
    6. private Item[] items;
    7. private int position = 0;
    8. public ConcreteIterator(Item[] items) {
    9. this.items = items;
    10. }
    11. @Override
    12. public Object next() {
    13. return items[position++];
    14. }
    15. @Override
    16. public boolean hasNext() {
    17. return position < items.length;
    18. }
    19. }
    1. public class Client {
    2. public static void main(String[] args) {
    3. Aggregate aggregate = new ConcreteAggregate();
    4. Iterator iterator = aggregate.createIterator();
    5. while (iterator.hasNext()) {
    6. System.out.println(iterator.next());
    7. }
    8. }
    9. }

    三. 优缺点

    优点:
    1. 简化了集合类的接口,使用者可以更加简单地遍历集合对象,而不需要了解集合内部结构和实现细节。
    2. 将集合和遍历操作解耦,使得我们可以更灵活地使用不同的迭代器来遍历同一个集合,根据需求选择不同的遍历方式。
    3. 满足开闭原则,如果需要增加新的遍历方式,只需实现一个新的具体迭代器即可,不需要修改原先聚合对象的代码。
    缺点:
    1. 具体迭代器实现的算法对外不可见,因此不利于调试和维护。
    2. 对于某些小型、简单的集合对象来说,使用迭代器模式可能会显得过于复杂,增加了代码的复杂性。

    JDK中的迭代器
    java.util.Iterator
    java.util.Enumeration

  • 相关阅读:
    QT6之QTimeZone
    zk分布式Job 实现的业务逻辑
    Fedora 39(需联网)一键安装 Oracle 19C(19.22)单机版
    HTML5期末大作业:基于html企业官网项目的设计与实现【艺术官网】
    Android中的常用布局
    Python中使用requests库遇到的问题及解决方案
    React 入门:组件实例三大属性之props
    【进程VS容器VS虚拟机】
    Java如遍历获取对象中的所有属性和值
    excel表格在线编辑(开源版)
  • 原文地址:https://blog.csdn.net/mrluo735/article/details/133709670