2011年4月19日 星期二

GoF Behavioral - Iterator Pattern


  • Intent


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.


  • Benefits




  1. It supports variations in the traversal of a collection(對於多種不同的物件集合提供同樣的走訪方法)

  2. It simplifies the interface to the collection




  • 適用情境




  1. 當存取一個集合物件時,我不需要知道其內部是如何地進行運作,而很簡單的直接將我要的結果傳回

  2.  多個物件走訪方式需要透過集合來進行

  3. 以一個單一的介面,提供多種不同物件集合結構的存取




  • 常見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"]Iterator pattern[/caption]


  • Sample Code



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());
}
}
}

沒有留言: