Design-pattern-iterator-pattern

提供:Dev Guides
移動先:案内検索

デザインパターン-イテレータパターン

イテレータパターンは、Javaおよび.Netプログラミング環境で非常に一般的に使用されるデザインパターンです。 このパターンは、基礎となる表現を知る必要なく、コレクションオブジェクトの要素にシーケンシャルにアクセスする方法を取得するために使用されます。

イテレータパターンは、動作パターンカテゴリに分類されます。

実装

ナビゲーションメソッドをナレーションする_Iterator_インターフェイスと、イテレータを再実行する_Container_インターフェイスを作成します。 _Container_インターフェースを実装する具体的なクラスは、_Iterator_インターフェースを実装して使用する責任があります。

デモクラス_IteratorPatternDemo_は、_NamesRepository_にコレクションとして保存されている_Names_を印刷するための具体的なクラス実装である_NamesRepository_を使用します。

イテレーターパターンUML図

ステップ1

インターフェイスを作成します。

Iterator.java

public interface Iterator {
   public boolean hasNext();
   public Object next();
}

Container.java

public interface Container {
   public Iterator getIterator();
}

ステップ2

_Container_インターフェースを実装する具象クラスを作成します。 このクラスには、_Iterator_インターフェイスを実装する内部クラス_NameIterator_があります。

NameRepository.java

public class NameRepository implements Container {
   public String names[] = {"Robert" , "John" ,"Julie" , "Lora"};

   @Override
   public Iterator getIterator() {
      return new NameIterator();
   }

   private class NameIterator implements Iterator {

      int index;

      @Override
      public boolean hasNext() {

         if(index < names.length){
            return true;
         }
         return false;
      }

      @Override
      public Object next() {

         if(this.hasNext()){
            return names[index++];
         }
         return null;
      }
   }
}

ステップ3

_NameRepository_を使用して、イテレータを取得し、名前を出力します。

IteratorPatternDemo.java

public class IteratorPatternDemo {

   public static void main(String[] args) {
      NameRepository namesRepository = new NameRepository();

      for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){
         String name = (String)iter.next();
         System.out.println("Name : " + name);
      }
   }
}

ステップ4

出力を確認します。

Name : Robert
Name : John
Name : Julie
Name : Lora