Iterators模式探讨(笔记心得体会)

04-03-15 tbase

说明:这个模式已经被整合入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">