diff --git a/notes/设计模式.md b/notes/设计模式.md index f4216e01..097279f2 100644 --- a/notes/设计模式.md +++ b/notes/设计模式.md @@ -1152,11 +1152,15 @@ Tea.addCondiments **1. 模式定义** -提供一种顺序访问一个聚合对象中的各个元素的方法,而又不暴露其内部的表示。 +提供顺序访问一个聚合对象中的各个元素的方法,而又不暴露聚合对象内部的表示。 **2. 模式类图** -客户类拥有一个聚合对象和迭代器对象,迭代器对象是聚合对象生成的。只需要迭代器定义好移动的操作,就可以让聚合对象能够顺序遍历。 +- Aggregate 是聚合类,其中 createIterator() 方法可以产生一个 Iterator 对象; + +- Iterator 主要定义了 hasNext() 和 next() 方法。 + +- Client 需要拥有一个 Aggregate 对象,这是很明显的。为了迭代变量 Aggregate 对象,也需要拥有 Iterator 对象。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics//439deca7-fed0-4c89-87e5-7088d10f1fdb.jpg) @@ -1180,12 +1184,14 @@ public class Aggregate { } ``` + ```java public interface Iterator { boolean hasNext(); int next(); } ``` + ```java public class ConcreteIterator implements Iterator { @@ -1236,7 +1242,11 @@ public class Client { **1. 实现接口** -Java 中已经有了 Iterator 接口,在使用 Java 实现时,需要让聚合对象实现 Iterable 接口,该接口有一个 iterator() 方法会返回一个 Iterator 对象。使用 Java 内置的迭代器实现,客户对象可以使用 foreach 循环来遍历聚合对象中的每个元素。 +在使用 Java 的迭代器实现时,需要让聚合对象去实现 Iterable 接口,该接口有一个 iterator() 方法会返回一个 Iterator 对象。 + +使用 Java 内置的迭代器实现,客户对象可以使用 foreach 循环来遍历聚合对象中的每个元素。 + +Java 中的集合类基本都实现了 Iterable 接口。 **2. 代码实现**