vuePress-theme-reco MS    2019 - 2020

Choose mode

  • dark
  • auto
  • light
主页
分类
  • 程序设计
标签
时间线
关于我
author-avatar

MS

26

文章

3

标签

主页
分类
  • 程序设计
标签
时间线
关于我
  • 迭代器模式

    • Why
      • What
        • UML
        • 示例
        • 适用场景

    迭代器模式

    vuePress-theme-reco MS    2019 - 2020

    迭代器模式


    MS 2020-04-17 10:03:40 面向对象 设计模式

    # Why

    将聚合类中负责遍历数据的方法提取出来,封装到专门的类中,实现数据存储和数据遍历分离,无须暴露聚合类的内部属性即可对其进行操作,即迭代器模式的目的。

    聚合对象的两个职责,一是存储数据,而是遍历数据。前者是聚合对象的基本职责,而后者是可以变化和分离的。

    迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。

    # What

    # UML

    迭代器模式

    需要注意的是抽象迭代器接口设计很重要,一方面要充分满足各种遍历操作需求,尽量为各种遍历方法提供声明,另一方面不能包含太多方法,因为会给子类实现带来麻烦。可以使用抽象类来设计抽象迭代器,为每一个方法提供一个空的默认实现。

    # 示例

    Sunny软件公司为某商场开发了一套销售管理系统,在对该系统进行分析和设计时,Sunny软件公司开发人员发现经常需要对系统中的商品数据、客户数据等进行遍历,为了复用这些遍历代码,需要设计一个抽象的数据集合类

    示例链接

    为了能够让迭代器可以访问到聚合对象中的数据,还可以将迭代器类设计为聚合类的内部类。

    # 适用场景

    • 访问一个聚合对象的内容而无须暴露它的内部表示。隐藏其内部实现细节
    • 需要为一个聚合对象提供多种遍历方式
    • 为遍历不同的聚合结构提供统一的接口,在该接口的实现中为不同的聚合结构提供不同的遍历方式,而客户端可以一致性地操作该接口