首页 > 其他分享 >初识设计模式 - 迭代器模式

初识设计模式 - 迭代器模式

时间:2022-10-14 09:12:20浏览次数:48  
标签:遍历 聚合 迭代 对象 接口 初识 设计模式 public

简介

迭代器设计模式(Iterator Design Pattern),也叫作游标设计模式(Cursor Design Pattern)。

迭代器模式将集合对象的遍历操作从集合类中拆分出来,放到迭代器类中,让两者的职责更加单一。

其定义是,提供一种方法来访问聚合对象,而不暴露这个对象的内部实现。

典型实现

首先,定义一个用于遍历聚合对象中所存储元素的抽象迭代器接口,其代码示例如下:

public interface Iterator {
    // 将游标指向第一个元素
    public void first();
    // 将游标指向下一个元素
    public void next();
    // 判断是否存在下一个元素
    public boolean hasNext();
    // 获取游标指向的当前元素
    public Object currentItem();
}

然后,我们通常将存储数据的类称作为聚合类,一般会在聚合类中创建迭代器对象,如下是抽象聚合接口的代码示例:

public interface Aggregate {
    public Iterator creteIterator();
}

在具体迭代器类中,我们需要注入聚合对象,以便后续使用迭代器时能访问到其数据,其代码示例如下:

public class ConcreteIterator implements Iterator {
    private Aggregate objects;
    private Object cursor;

    public ConcreteIterator(Aggregate objects) {
        this.objects = objects;
    }

    // 将游标指向第一个元素
    public void first() {}
    // 将游标指向下一个元素
    public void next() {}
    // 判断是否存在下一个元素
    public boolean hasNext() {}
    // 获取游标指向的当前元素
    public Object currentItem() {}
}

在具体聚合类中,通常是实现存储数据的逻辑,以及指定具体迭代器的对象,其代码示例如下:

public class ConcreteAggregate implements Aggregate {
    public Iterator creteIterator() {
        return new ConcreteIterator(this);
    }
}

总结

优点

迭代器模式的主要优点如下:

  • 封装性良好,访问一个聚合对象的内容而无需暴露它的内部实现
  • 将遍历操作交给迭代器,简化了复杂聚合类的设计
  • 支持以不同的方式遍历聚合对象,在同一个聚合对象上可以定义多种遍历方式
  • 增加新的聚合类和迭代器类都很方便,满足开闭原则

缺点

迭代器模式的主要缺点如下:

  • 迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加
  • 抽象迭代器的设计难度较大,需要充分考虑系统将来的扩展

适用场景

迭代器模式的适用场景如下:

  • 访问一个聚合对象的内容而无需暴露它的内部实现
  • 需要为一个聚合对象提供多种遍历方式
  • 为遍历不同的聚合对象提供一个统一的接口

源码

在 Java 中,迭代器的应用非常广。

最顶层的 Collection 集合接口继承了 Iterable 接口,其实表明了所有的集合对象都是可迭代对象,并且都需要实现获取 Iterator 对象的方法。

将这个源码映射到典型实现中,Iterable 接口和 Collection 接口就是抽象聚合接口,Iterator 接口则是抽象迭代器接口。

标签:遍历,聚合,迭代,对象,接口,初识,设计模式,public
From: https://www.cnblogs.com/fatedeity/p/16790480.html

相关文章

  • 初识babel
    Babel编译安装Node.js,初始化项目yarninit-y安装babel-cliyarnadd@babel/core@babel/cli@babel/preset-env--devyarnadd@babel/polyfill添加执行脚......
  • 【GUI视频教程】GUI综合实战视频教程第1期:综合UI项目规划以及AppWizard和ThreadX GUIX
    ​之前一直打算录制GUI视频教程,但是没有想好该如何录制,经过这段时间的考虑和网友的建议,准备做成综合实战视频,每个功能都是独立的应用。视频:​​https://www.bilibili.com/vi......
  • 《大话设计模式 Java溢彩加强版》相关主题
    《大话设计模式Java溢彩加强版》读者须知     《大话设计模式Java溢彩加强版》在2022年10月在各大网上书店中有售!源代码与课件下载 《大话设计模式Java溢彩......
  • 【JS】167-JavaScript设计模式——装饰者模式
    四、装饰者模式(DecoratorPattern)1.概念介绍装饰者模式(DecoratorPattern):在不改变原类和继承情况下,动态添加功能到对象中,通过包装一个对象实现一个新的具有原对象相同接口......
  • 【JS】169-JavaScript设计模式——外观模式
    六、外观模式(FacadePattern)1.概念介绍外观模式(FacadePattern) 是一种简单又常见的模式,它为一些复杂的子系统接口提供一个更高级的统一接口,方便对这些子系统的接口访问......
  • 【JS】168-JavaScript设计模式——策略模式
    五、策略模式(StrategyPattern)1.概念介绍策略模式(StrategyPattern):封装一系列算法,支持我们在运行时,使用相同接口,选择不同算法。它的目的是为了将算法的使用与算法的实现......
  • 【JS】166-JavaScript设计模式——迭代器模式
    三、迭代器模式(IteratorPattern)1.概念介绍迭代器模式(IteratorPattern) 是提供一种方法,顺序访问一个聚合对象中每个元素,并且不暴露该对象内部。这种模式属于行为型模式......
  • 【JS】172-JavaScript设计模式——观察者模式
    九、观察者模式(ObserverPatterns)1.概念介绍观察者模式(ObserverPatterns) 也称订阅/发布(subscriber/publisher)模式,这种模式下,一个对象订阅定一个对象的特定活动,并在状......
  • 【JS】170-JavaScript设计模式——代理模式
    七、代理模式(ProxyPattern)1.概念介绍代理模式(ProxyPattern) 为其他对象提供一种代理,来控制这个对象的访问,代理是在客户端和真实对象之间的介质。简单的理解:如我们需要......
  • 【JavaScript】13-JS中常见设计模式
    开发中,我们或多或少地接触了设计模式,但是很多时候不知道自己使用了哪种设计模式或者说该使用何种设计模式。本文意在梳理常见设计模式的特点,从而对它们有比较清晰的认知。Ja......