diff --git a/notes/pics/dp-iterator.png b/notes/pics/dp-iterator.png index 6ff07af7..8a53de59 100644 Binary files a/notes/pics/dp-iterator.png and b/notes/pics/dp-iterator.png differ diff --git a/notes/设计模式 - 迭代器.md b/notes/设计模式 - 迭代器.md index 1d1ecbc4..ec2c294d 100644 --- a/notes/设计模式 - 迭代器.md +++ b/notes/设计模式 - 迭代器.md @@ -12,13 +12,13 @@ ### 实现 ```java -public interface Aggregate { - Iterator createIterator(); +public interface Aggregate { + Iterator createIterator(); } ``` ```java -public class ConcreteAggregate implements Aggregate { +public class ConcreteAggregate implements Aggregate { private Integer[] items; @@ -30,8 +30,8 @@ public class ConcreteAggregate implements Aggregate { } @Override - public Iterator createIterator() { - return new ConcreteIterator(items); + public Iterator createIterator() { + return new ConcreteIterator<>(items); } } ``` @@ -46,7 +46,7 @@ public interface Iterator { ``` ```java -public class ConcreteIterator implements Iterator { +public class ConcreteIterator implements Iterator { private Item[] items; private int position = 0; @@ -56,7 +56,7 @@ public class ConcreteIterator implements Iterator { } @Override - public Object next() { + public Item next() { return items[position++]; } @@ -71,7 +71,7 @@ public class ConcreteIterator implements Iterator { public class Client { public static void main(String[] args) { - Aggregate aggregate = new ConcreteAggregate(); + Aggregate aggregate = new ConcreteAggregate(); Iterator iterator = aggregate.createIterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); @@ -80,6 +80,15 @@ public class Client { } ``` +```text +0 +1 +... +9 +``` + +Client 只用到 hasNext() 和 next(),ConcreteAggregate 把数组换成链表时,只要同时换掉迭代器,Client 不用改。 + ### JDK 中的应用 - [java.util.Iterator](http://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html) - [java.util.Enumeration](http://docs.oracle.com/javase/8/docs/api/java/util/Enumeration.html) @@ -87,4 +96,4 @@ public class Client { ## 参考资料 - 弗里曼. Head First 设计模式 [M]. 中国电力出版社, 2007. -- Gamma E. 设计模式: 可复用面向对象软件的基础 [M]. 机械工业出版社, 2007. +- Gamma E. 设计模式:可复用面向对象软件的基础 [M]. 机械工业出版社, 2007.