Latest web development tutorials

反復モード

反復モード(Iterator Patternに)Javaと.NETプログラミング環境は非常に一般的なデザインパターンです。 このモードは、オブジェクトのコレクションのシーケンシャルアクセス要素に使用され、オブジェクトのコレクションは、基礎となる表現を知っている必要はありません。

イテレータパターンは、行動パターンに属します。

入門

意図:重合の各要素内のオブジェクトにアクセスする方法が、オブジェクトの内部を公開する必要はありませんを提供します。

主に解決するために:全体の統合オブジェクトを横断する別の方法を。

ときに使用する:高分子体を横断します。

修正方法:イテレータの代わりに集約オブジェクトへの責任の要素間の散歩を。

キーコード:のhasNext、次の:インターフェイスを定義します。

アプリケーション例:イテレータでJAVA。

利点:1、集約オブジェクトを横断する別の方法をサポートしています。2、重合イテレータ・クラスを単純化します。 3、同じ重合において複数の横断を持つことができます。 4は、反復モードでは、元のコードを変更することなく、高分子イテレータクラスと簡単なの新しいクラスを追加します。

短所:により職務のイテレータパターンデータストレージおよびトラバースデータの分離に、新しい集約クラスがある程度システムの複雑さを増大させ、新しいイテレータ・クラスの増加に対応、クラスのペアの数が増加し、必要に追加します。

使用シナリオ:1、その内部表現を公開することなく、ポリマーコンテンツオブジェクトへのアクセス。2、集約オブジェクト・トラバーサル方法の多様性を提供する必要性。 異なる集合組織を横断するための3は、統一されたインタフェースを提供します。

注:両方がコレクションの内部構造に触れることなく行われ、だけでなく、内部のデータ収集への外部コードの透過的なアクセスをさせることができるように、反復モードは、関与していると、オブジェクトのコレクションの探索動作、抽象イテレータクラスを分離されています。

実現

私たちは物語のIteratorインターフェイスを作成し、ナビゲーション方法は、Containerインターフェースの反復子を返します。 Entityクラスのコンテナは、インターフェイスがIteratorインターフェイスを実装するための責任を負うことになります実装します。

IteratorPatternDemo、私たちのデモクラスは、 名前のコレクションとして保存されているNamesRepositoryNamesRepositoryを印刷するエンティティクラスを使用します。

イテレータパターンUMLダイアグラム

ステップ1

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

Iterator.java

パブリックインターフェイスイテレータ{
   パブリックブールのhasNext();
   次のパブリックオブジェクト();
}

Container.java

パブリックインターフェイスコンテナ{
   公共イテレータgetIterator();
}

ステップ2

コンテナは、インタフェースを実装するエンティティクラスを作成します。 このクラスは内部クラスNameIteratorIteratorインターフェイスを実現しています。

NameRepository.java

パブリッククラスNameRepositoryは{コンテナを実装します
   公共の文字列名[] = { "ロバート"、 "ジョン"、 "ジュリー"、 "ローラ・"};

   @Override
   公共イテレータgetIterator(){
      新しいNameIteratorを返します();
   }

   プライベートクラスNameIteratorは{Iteratorを実装します

      int型のインデックス。

      @Override
      パブリックブールのhasNext(){
         {(インデックス<names.length)の場合
            trueを返します。
         }
         falseを返します。
      }

      @Override
      次のパブリックオブジェクト(){
         場合(this.hasNext()){
            名前を返す[インデックス++];
         }
         ヌルを返します。
      }		
   }
}

ステップ3

イテレータを取得するにはNameRepositoryを使用して 、名前を印刷します。

IteratorPatternDemo.java

パブリッククラスIteratorPatternDemo {
	
   公共の静的な無効メイン(文字列[] args){
      NameRepository namesRepository =新しいNameRepository();

      {(;; iter.hasNext()イテレータITER = namesRepository.getIterator())のために
         文字列名=(String)をiter.next();
         System.out.println( "名:" +名)。
      } 	
   }
}

ステップ4

出力を確認します。

名:Robert
名前:ジョン
名前:ジュリー
名前:ローラ・