迭代器模式

7/13/2021

# 迭代器模式定义

迭代器模式提供一种顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示的方法。

  • 迭代器模式把在元素间游走的责任交给迭代器,而不是聚合对象
  • 让聚合接口和实现变简洁,让聚合更专注于管理对象集合,而不必理会遍历

# 何时使用 WHEN

当需要在聚合对象各个元素间游走时使用,我们希望能有效一个简单的方式来遍历所有项。

# 迭代器模式实现

public interface Aggregate { // 抽象聚合类,提供一个共同的接口供所有聚合使用
    public Iterator createIterator();
}

public class ConcreteAggregate {
    public Iterator createIterator() { // 每一个具体聚合类负责实例化一个具体迭代器,具体迭代器负责管理目前遍历的位置
        ...
    }
}

public interface Iterator {
    public boolean hasNext();
    public Object next();
    public Object remove();
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 设计原则

一个类应该只有一个引起变化的原因

  • 尽量让每个类保持单一责任
  • 内聚(cohesion):衡量一个类或模块紧密地达到单一目的或责任。当一个模块或一个类被设计成只支持一组相关的功能时,我们说他有高内聚。

# 组合模式

组合模式允许将对象组合成树形结构来表现 “整体/部分” 层次结构,组合能让客户以一致的方式处理个别对象及对象组合

  • 忽略对象组合和个别对象之间的差别,客户将组合以及叶节点一视同仁,对客户透明。
  • 组合内所有的对象都必须实现相同的接口:
    • 有些对象会具备一些没有意义的方法调用
    • 可以让这样没有意义的方法返回 null 或者 false、或者直接抛出异常