• 设计模式 - 迭代器模式


    目录

    一. 前言

    二. 实现

    三. 优缺点


    一. 前言

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

    二. 实现

    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

  • 相关阅读:
    STM32-初识嵌入式
    算法基础——求每对结点之间的最短路径
    源码安装python
    涉及rocketMQ,jemeter等性能测试服务器的安装记录
    [架构之路-223]:数据管理能力成熟度评估模型DCMM简介
    postman下载文件的名字 中文部分表示成%
    力扣 8049. 判断能否在给定时间到达单元格
    Oracle 事务的开启和结束
    即将见面:SpreadJS V16:重大改进
    文心一言 VS 讯飞星火 VS chatgpt (82)-- 算法导论8.1 1题
  • 原文地址:https://blog.csdn.net/mrluo735/article/details/133709670