To provide a way to access the elements of an aggregate object sequentially without exposing its underlying implementation.
java.util.Enumeration and java.util.Iterator are examples of the Iterator pattern.
- It supports variations in the traversal of a collection(對於多種不同的物件集合提供同樣的走訪方法)
- It simplifies the interface to the collection
- 當存取一個集合物件時,我不需要知道其內部是如何地進行運作,而很簡單的直接將我要的結果傳回
- 多個物件走訪方式需要透過集合來進行
- 以一個單一的介面,提供多種不同物件集合結構的存取
- 常見API - java.util.Iterator , java.util.Enumeration (ps : jdk 5.0以後有 Iterable interface)
- Class Diagram
[caption id="attachment_242" align="alignnone" width="458" caption="Iterator pattern"]
[/caption]
import java.util.Iterator;
class IterableString implements Iterable<Character> {
private String original;
public IterableString(String original) {
this.original = original;
}
public Iterator<Character> iterator() {
return new InnerIterator();
}
private class InnerIterator implements Iterator<Character> {
private int index;
public boolean hasNext() {
return index < original.length();
}
public Character next() {
Character c = original.charAt(index);
index++;
return c;
}
public void remove() {}
}
}
public class Main {
public static void main(String[] args) {
foreach(new IterableString("Justin"));
}
public static void foreach(Iterable<Character> iterable) {
Iterator<Character> iterator = iterable.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
沒有留言:
張貼留言