0

特別な値 (例: ) が検出されるまで、「プル」ベースでソースからオブジェクト値を抽出するオブジェクトを考えてみましょうnull

ではJava、API は次のようになります。

  public interface ValueExtractor<T> {
    public T extractNext();
  }

操作上、これは ですIteratorが、(一種の) "next()" メソッドReaderしかなく、ソースからバイト単位で読み取らないため、 ではありません。また、使い果たされるまですべてのデータ値 (レコード) を "スクロール" するという意味で、データベース カーソルに似ています。

このユースケースの「イテレータ」以外の設計パターンはありますか?

このような単純なオブジェクトを呼び出すのに最適な名前は何ですか?

4

2 に答える 2

2

これはIterator. インターフェースに従っていないからといってjava.util.Iterator、イテレーター デザイン パターンに従っていないわけではありません。

唯一の違いは、次の要素のフェッチとフェッチする次のオブジェクトがあるかどうかのチェックを組み合わせたメソッドが 1 つしかないことです。null要素がなくなったら戻ると思います。

hasNext()メソッドとメソッドを分離fetchNext()するか、それらを組み合わせて null を返す単一のメソッドにするかは API の決定事項であり、イテレーター デザイン パターンに従っているという事実は変わりません。

ただし、API 命名規則の観点から、すべての Iterator メソッドを 1 つのfetchNext()メソッドに結合することを選択した場合、クラス名に「Iterator」という単語を使用しないでください。コードのユーザーが混乱する可能性があるためです。あなたのクラスはjava.util.Iteratorインターフェースを実装します。

それ以外の場合は、クラスに名前を付けるかどうかは実際には問題ではないため、反復するデータに基づいて名前を付けます。

編集 OPで言うので:

また、使い果たされるまですべてのデータ値 (レコード) を "スクロール" するという意味で、データベース カーソルに似ています。

おそらく次のような名前を付けることができますScrollableRecords

于 2015-03-09T00:50:48.220 に答える