14 Iterator迭代器(行为模式)

版权声明:就是开个版权玩一下 https://blog.csdn.net/qq_41997479/article/details/86651180

14 Iterator(行为模式)

 

 

    • 提供按顺序访问聚合对象的元素的方法,而不公开其底层表示形式。
    • 也称为cursor
    • 动机
      • 聚合对象(如列表)应该提供一种访问其元素而不公开其内部结构的方法。
      • 迭代器模式的关键思想是负责访问和遍历列表对象,并将其放入迭代器对象中。
      • 将遍历机制与List对象允许我们为不同的遍历策略定义迭代器,而无需在List接口中枚举它们。
    • 什么时候用:
      • 访问聚合对象的内容而不公开其内部表示。
      • 支持聚合对象的多次遍历。
      • 为遍历不同聚合结构(即支持多态迭代)提供统一的接口。
    • 结构:

 

 

    • 协作:一个具体的迭代器能在聚合中跟踪当前对象,并可以计算遍历中的后续对象。
    • 后果:
      • 它支持聚合遍历中的变体。
        • 复合团聚体可以通过许多方式。比如树的遍历方式
      • 迭代器简化了聚合接口。
      • 聚合上可以挂起n个以上的遍历。
        • 迭代器跟踪自己的遍历状态。
        • 因此,可以同时进行多个遍历。
    • 实现:
      •  
      • 不能被实例化,回去看arraylist
      • 外部迭代器:
        • 使用活动迭代器的客户机必须推进遍历,并从迭代器显式地请求下一个元素。
        • 比被动迭代器更灵活;

 

    • 内部迭代器:

迭代器控制迭代;客户端将一个要执行的操作交给一个被动迭代器,迭代器将该操作应用于聚合中的每个元素。

更容易使用,因为它为您定义了迭代逻辑。

    1. 聚合可能定义遍历算法,并使用迭代器只存储迭代的状态(光标),它指向聚合中的当前位置。
    • 迭代器负责遍历算法,那么在同一个聚合上使用不同的迭代算法很容易,在不同的聚合上重用相同的算法也更容易。
      • 如果遍历算法可能需要访问聚合的私有变量,则在聚合的内部类中定义迭代器。
    • 静态迭代器:在创建迭代器时包含聚合快照的复制迭代器。遍历方法看不到新的更改。

动态迭代器:动态迭代器与静态迭代器相对立。在遍历聚合时,允许对聚合进行任何更改。

    1. 快速失败迭代器在迭代期间更改聚合时直接引发异常。
    2. 迭代器的最小接口由First、Next、IsDone和currentiem操作组成。
    3. 过滤迭代器
      1. 公共迭代器遍历聚合的每个元素。
      2. 过滤器迭代器计算聚合的元素并返回与某个条件匹配的元素。

 

    1. 外部迭代器很难通过递归聚合结构(e。,因为结构中的某个位置可能跨多个嵌套聚合级别。
      1. 活动(外部)迭代器必须存储通过组合以跟踪当前对象。
      2. 使用被动(内部)迭代器更容易。它可以通过递归调用自身来记录当前位置,从而隐式地将路径存储在调用堆栈中。
    1. Null迭代器可以使遍历树结构的聚合(如组合)变得更容易。

 

猜你喜欢

转载自blog.csdn.net/qq_41997479/article/details/86651180