【设计模式-行为型】迭代器模式

一、什么是迭代器模式

迭代器模式,顾名思义,同样的为了让大家更加了解啥是迭代器。我们通过电影情结来说明,不知道大家有没有看过一个剧烧脑的科幻大片--《盗梦空间》。影片讲述了由造梦师(莱昂纳多·迪卡普里奥扮演的)带领特工团队进入他人梦境,从潜意识中盗取机密并重塑他人梦境的故事。其中个东西叫做造梦机,无论是谁(稍微不太准确),加以培训(使用造梦机)都可以进入多层梦境。这就是个典型的迭代器模式。盗梦空间中团队成员通过造梦机在不同的梦境层次之间穿梭,这种机制很好地体现了迭代器模式的核心思想。每次使用"造梦机"进入下一层梦境,都可以看作是对梦境层次集合的一次遍历操作。这种模式特别适用于需要遍历集合的场景。

可以这么说,谁使用了 造梦机都会 进入迭代模式(梦境),并做一些处理,植入一些潜意识或者获得一些信息。

二、为什么使用迭代器模式

迭代器模式使得团队成员可以灵活地在不同的梦境层次之间穿梭,完成任务操作,而无需深入了解梦境层次的内部结构。

  1. 访问聚合对象的内容:当需要访问一个聚合对象的内容,而不需要暴露其内部的表示时,迭代器模式非常适用。团队成员通过造梦机访问梦境层次的内容,而无需了解梦境层次的具体实现细节。

  2. 支持多种遍历方式:当需要为聚合对象提供多种遍历方式时,迭代器模式可以提供统一的接口。团队成员可以通过造梦机选择不同的遍历方式,如正向遍历、反向遍历、跳跃遍历等,而不需要修改梦境层次结构的代码。

  3. 为遍历不同的聚合结构提供统一接口:当需要遍历不同类型的聚合结构时,迭代器模式可以提供统一的接口。团队成员可以使用统一的接口来遍历不同的梦境层次结构,而无需关心具体的结构实现。

三、迭代器模式示例

  1. 迭代器(Iterator 造梦机规范):通过造梦机,团队成员可以在不同的梦境层次之间穿梭。造梦机提供了遍历梦境层次的逻辑。

    java 复制代码
    public interface Iterator {
        boolean hasNext();
        Object next();
    }
  2. 具体迭代器(ConcreteIterator)

    具体的梦境穿梭机制 :造梦机的具体实现,提供了进入下一层梦境(next())和检查是否还有下一层梦境(hasNext())的功能。public class DreamLevelIterator implements Iterator { private List<String> levels; private int index; public DreamLevelIterator(List<String> levels) { this.levels = levels; this.index = 0; } @Override public boolean hasNext() { return index < levels.size(); } @Override public Object next() { if (hasNext()) { return levels.get(index++); } return null; } }
    *

  3. 聚合接口(Aggregate 梦境层次结构):定义了创建迭代器的方法,即如何通过造梦机进入梦境。

    java 复制代码
    public interface Aggregate {
        Iterator createIterator();
    }
  4. 具体聚合类(ConcreteAggregate 具体的梦境层次):实现了聚合接口,提供了梦境层次的集合,即团队成员可以进入的不同梦境。

    java 复制代码
    import java.util.ArrayList;
    import java.util.List;
    
    public class DreamLevels implements Aggregate {
        private List<String> levels = new ArrayList<>();
    
        public DreamLevels() {
            levels.add("第一层梦境");
            levels.add("第二层梦境");
            levels.add("第三层梦境");
            levels.add("第四层梦境");
        }
    
        @Override
        public Iterator createIterator() {
            return new DreamLevelIterator(levels);
        }
    
    }

    通过这个代码示例,我们可以清晰地看到迭代器模式的核心优势。迭代器模式通过将集合的遍历逻辑从集合本身分离出来,提供了一种统一的方式访问不同类型的集合。这种模式特别适用于需要遍历集合的场景,使得客户端代码可以独立于集合的类型。

相关推荐
angen20182 小时前
二十三种设计模式-享元模式
设计模式·享元模式
lshzdq8 小时前
【设计模式】访问者模式(Visitor Pattern): visitor.visit(), accept()
设计模式·c#·访问者模式
博一波8 小时前
【设计模式-行为型】命令模式
设计模式·命令模式
博一波11 小时前
【设计模式-行为型】解释器模式
设计模式·解释器模式
福大大架构师每日一题11 小时前
2.6 createCmd中的builder建造者设计模式
设计模式·kubernetes
Tester_孙大壮12 小时前
第31章 测试驱动开发中的设计模式与重构解析(Python 版)
python·设计模式·重构
咖啡の猫1 天前
策略模式
设计模式·策略模式
Tester_孙大壮1 天前
第30章 测试驱动开发中的设计模式解析(Python 版)
驱动开发·python·设计模式
angen20181 天前
二十三种设计模式-桥接模式
设计模式