diff --git "a/notes/\350\256\276\350\256\241\346\250\241\345\274\217.md" "b/notes/\350\256\276\350\256\241\346\250\241\345\274\217.md" index cee12101a37bbabd04a726b6db564d776535c9b1..1783c170aa5318823a78f6fa263d34153a40b918 100644 --- "a/notes/\350\256\276\350\256\241\346\250\241\345\274\217.md" +++ "b/notes/\350\256\276\350\256\241\346\250\241\345\274\217.md" @@ -496,7 +496,80 @@ public class Client { ### 意图 -提供一种一致的访问聚合对象元素的方法,并且不暴露聚合对象的内部表示。 +提供一种顺序访问聚合对象元素的方法,并且不暴露聚合对象的内部表示。 + +### 类图 + +

+ +### 实现 + +```java +public interface Aggregate { + Iterator createIterator(); +} +``` + +```java +public class ConcreteAggregate implements Aggregate { + + private Integer[] items; + + public ConcreteAggregate() { + items = new Integer[10]; + for (int i = 0; i < items.length; i++) { + items[i] = i; + } + } + + @Override + public Iterator createIterator() { + return new ConcreteIterator(items); + } +} +``` + +```java +public interface Iterator { + Item next(); + + boolean hasNext(); +} +``` + +```java +public class ConcreteIterator implements Iterator { + + private Item[] items; + private int position = 0; + + public ConcreteIterator(Item[] items) { + this.items = items; + } + + @Override + public Object next() { + return items[position++]; + } + + @Override + public boolean hasNext() { + return position < items.length; + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + Aggregate aggregate = new ConcreteAggregate(); + Iterator iterator = aggregate.createIterator(); + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } + } +} +``` ### JDK diff --git a/pics/b0f61ac2-a4b6-4042-9cf0-ccf4238c1ff7.png b/pics/b0f61ac2-a4b6-4042-9cf0-ccf4238c1ff7.png new file mode 100644 index 0000000000000000000000000000000000000000..73dad48397c2350198b555ce54ea2bfacd75a97c Binary files /dev/null and b/pics/b0f61ac2-a4b6-4042-9cf0-ccf4238c1ff7.png differ