• 二十三种设计模式全面解析-迭代器模式进阶篇:探索变体与扩展



    在前文中,我们深入探讨了迭代器模式的概念、原理和基本应用。然而,迭代器模式并不止于此,它还有更多的变体和扩展,为我们提供了更多灵活的遍历方式和功能。今天,我将继续带领你进入迭代器模式的进阶篇,探索双向迭代器和内部迭代器的奥秘。让我们继续揭开迭代器模式的神秘面纱!


    一、双向迭代器(Bidirectional Iterator)

    1、双向迭代器的介绍

    双向迭代器是迭代器模式的一种变体,它提供了在集合中进行正向和逆向遍历的能力。与标准迭代器只能单向遍历不同,双向迭代器允许我们在集合中向前和向后移动。它需要集合实现一个额外的方法,使得迭代器能够反向遍历集合中的元素。


    2、双向迭代器适用场景

    双向迭代器适用于需要在集合中进行正向和逆向遍历的场景,例如文本编辑器中的撤销/重做操作。


    3、双向迭代器技术点

    双向迭代器需要在迭代器接口中增加反向遍历的方法,并在具体迭代器实现中实现该方法。


    双向迭代器演示代码:

    interface BidirectionalIterator {
        boolean hasNext();
        T next();
        boolean hasPrevious();
        T previous();
    }
    
    class ArrayListBidirectionalIterator implements BidirectionalIterator {
        private List list;
        private int index;
    
        public ArrayListBidirectionalIterator(List list) {
            this.list = list;
            this.index = 0;
        }
    
        public boolean hasNext() {
            return index < list.size();
        }
    
        public T next() {
            if (hasNext()) {
                T element = list.get(index);
                index++;
                return element;
            }
            return null;
        }
    
        public boolean hasPrevious() {
            return index > 0;
        }
    
        public T previous() {
            if (hasPrevious()) {
                index--;
                return list.get(index);
            }
            return null;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    在上面示例代码中,我们分别定义了 BidirectionalIterator 接口和 ArrayListBidirectionalIterator 类来实现双向迭代器。


    二、内部迭代器(Internal Iterator)


    1、内部迭代器(Internal Iterator)的介绍

    内部迭代器是迭代器模式的另一种变体,它将遍历算法封装在集合内部。相比于标准迭代器需要显式地调用迭代器的方法来遍历集合,内部迭代器使用一个回调函数(函数接口)作为参数,并在集合内部自动执行遍历操作。这种方式使得遍历过程更加简洁,同时也隐藏了迭代器的实现细节。


    2、内部迭代器适用场景

    内部迭代器适用于遍历操作相对固定、不需要外部干预的场景,例如在集合中执行某种操作或判断条件。


    3、内部迭代器技术点

    内部迭代器通过使用回调函数(函数接口)来实现遍历操作,集合类在内部控制遍历过程。


    我们将继续使用前文的 ArrayList 类作为示例,来演示双向迭代器和内部迭代器的应用。

    interface ListProcessor {
        void process(T element);
    }
    
    class ArrayListInternalIterator {
        private List list;
    
        public ArrayListInternalIterator(List list) {
            this.list = list;
        }
    
        public void forEach(ListProcessor processor) {
            for (int i = 0; i < list.size(); i++) {
                T element = list.get(i);
                processor.process(element);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在上面示例代码中,我们分别定义了以及 ListProcessor 接口和 ArrayListInternalIterator 类来实现内部迭代器。


    总结:
    本文我们深入探讨了迭代器模式的进阶变体和扩展,包括双向迭代器和内部迭代器。双向迭代器赋予了我们在集合中反向遍历的能力,而内部迭代器则提供了一种更简洁、隐藏实现细节的遍历方式。这些变体和扩展丰富了迭代器模式的应用场景,使得我们能够更加灵活地处理不同的遍历需求。


    让我们继续探索更多关于设计模式和软件架构的知识,提升我们的编程技能,创造出更加优秀的软件作品!


    好了,今天的分享到此结束。如果觉得我的博文帮到了您,您的点赞和关注是对我最大的支持。如遇到什么问题,可评论区留言。


  • 相关阅读:
    Tomcat 源码分析 (设计模式) (七)
    pytorch教程
    刷新页面,记住页面内的列表查询参数——vue3实现
    java面试小经历
    数据仓库整理
    聚丙乙烯修饰小鼠血清白蛋白(MSA)/大鼠血清白蛋白(RSA)/小麦麦清白蛋白纳米粒(PS-MSA/RSA)
    《Python+Kivy(App开发)从入门到实践》自学笔记:简单UX部件——CheckBox复选框
    C++STL-string类的使用
    【Linux 基础笔记】(一)
    nginx实现灰度上线(InsCode AI 创作助手)
  • 原文地址:https://blog.csdn.net/lizhong2008/article/details/134351533