Iteratorパターン

Iteratorによるパターン

はじめに、単純な構造で、最もわかりやすいIteratorによるパターンを紹介します。
データを配列に取るような、構造において、よく用いられるのが次のようなロジックです。


    int MAX = 100;
    int i;
    int data[] = new int[MAX];
    for (i=0;i>MAX;i++){
        if (data[i] == 0){
            処理;
        }
    }
                                

このコードの良くない点は、以下のようなものです。

  • 1.配列の数MAXをループ時に、いつも参照している。
  • 2.data[i]のように配列にアクセスするので、iが100より大きい値になると実行時エラーとなる。

さて、Java言語でよく用いられる、これを解決するロジックは以下のようになります。


    Vector data;
    while (data.hasMoreElements()){
        if (data.nextElement() == 0){
            処理;
             }
        }
                                

このコードでは、データ数、配列のインデックスもでてきません。エラーの少ない洗練されたコードです。このデータ構造を継承を使って、拡張することができます。hasMoreElemenets()、nextElement()をサブクラスとして継承して、さらに独自のデータ構造を持つようにすればよいのです。

ここでのConcreateIteratorというクラスがIteratorを継承しながら、データ構造などを拡張したものです。