Iterators模式探討(筆記心得體會)

tbase發表於2004-03-15
說明:這個模式已經被整合入Java的Collection.在大多數場合下無需自己製造一個Iterator,只要將物件裝入Collection中,直接使用
Iterator進行物件遍歷。(節選自“http://www.jdon.com/designpatterns/index.htm”)

    非常常用的一個模式,使用上不用多說。Iterator介面倒是有些需要注意的地方,Iterator也是退耦的(指消除或減輕兩個以上物體間在某方面相互影響的方法)。
    1 迭代返回時的型別需要指定。因為next方法僅僅返回一個Object。最苯最方便的方法是手寫程式碼指定型別。
    2 但是容器中,由於容器持有的不一定是同一種型別,那麼跌代的時候。該如何確定池有的型別呢?最安全的方法(可能很不方便)是需要用
戶建立一個可以在返回時確定型別的跌代器。下面會有一個例子,是在建構函式中指定型別。

    注意:以下的程式碼可能很像Proxy 模式,但是實際上它的建立思想卻是Decorator 模式。
<p class="indent">


//TypedIterator.java
import java.util.*;

public class TypedIterator implements Iterator {
  private Iterator imp;
  private Class type;
  public TypedIterator(Iterator it, Class type) {
    imp = it;
    this.type = type;
  }

  public boolean hasNext() {
    return imp.hasNext();
  }

  public void remove() { imp.remove(); }

  public Object next() {
    Object obj = imp.next();
    if(!type.isInstance(obj))
      throw new ClassCastException(
        "TypedIterator for type " + type +
        " encountered type: " + obj.getClass());
    return obj;
  }
} ///:~
<p class="indent">

相關文章