# 迭代器模式定义
迭代器模式提供一种顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示的方法。
- 迭代器模式把在元素间游走的责任交给迭代器,而不是聚合对象
- 让聚合接口和实现变简洁,让聚合更专注于管理对象集合,而不必理会遍历
# 何时使用 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 设计原则
一个类应该只有一个引起变化的原因
- 尽量让每个类保持单一责任
- 内聚(cohesion):衡量一个类或模块紧密地达到单一目的或责任。当一个模块或一个类被设计成只支持一组相关的功能时,我们说他有高内聚。
# 组合模式
组合模式允许将对象组合成树形结构来表现 “整体/部分” 层次结构,组合能让客户以一致的方式处理个别对象及对象组合
- 忽略对象组合和个别对象之间的差别,客户将组合以及叶节点一视同仁,对客户透明。
- 组合内所有的对象都必须实现相同的接口:
- 有些对象会具备一些没有意义的方法调用
- 可以让这样没有意义的方法返回 null 或者 false、或者直接抛出异常