反復モード
反復モード(Iterator Patternに)Javaと.NETプログラミング環境は非常に一般的なデザインパターンです。 このモードは、オブジェクトのコレクションのシーケンシャルアクセス要素に使用され、オブジェクトのコレクションは、基礎となる表現を知っている必要はありません。
イテレータパターンは、行動パターンに属します。
入門
意図:重合の各要素内のオブジェクトにアクセスする方法が、オブジェクトの内部を公開する必要はありませんを提供します。
主に解決するために:全体の統合オブジェクトを横断する別の方法を。
ときに使用する:高分子体を横断します。
修正方法:イテレータの代わりに集約オブジェクトへの責任の要素間の散歩を。
キーコード:のhasNext、次の:インターフェイスを定義します。
アプリケーション例:イテレータでJAVA。
利点:1、集約オブジェクトを横断する別の方法をサポートしています。2、重合イテレータ・クラスを単純化します。 3、同じ重合において複数の横断を持つことができます。 4は、反復モードでは、元のコードを変更することなく、高分子イテレータクラスと簡単なの新しいクラスを追加します。
短所:により職務のイテレータパターンデータストレージおよびトラバースデータの分離に、新しい集約クラスがある程度システムの複雑さを増大させ、新しいイテレータ・クラスの増加に対応、クラスのペアの数が増加し、必要に追加します。
使用シナリオ:1、その内部表現を公開することなく、ポリマーコンテンツオブジェクトへのアクセス。2、集約オブジェクト・トラバーサル方法の多様性を提供する必要性。 異なる集合組織を横断するための3は、統一されたインタフェースを提供します。
注:両方がコレクションの内部構造に触れることなく行われ、だけでなく、内部のデータ収集への外部コードの透過的なアクセスをさせることができるように、反復モードは、関与していると、オブジェクトのコレクションの探索動作、抽象イテレータクラスを分離されています。
実現
私たちは物語のIteratorインターフェイスを作成し、ナビゲーション方法は、Containerインターフェースの反復子を返します。 Entityクラスのコンテナは、インターフェイスがIteratorインターフェイスを実装するための責任を負うことになります実装します。
IteratorPatternDemo、私たちのデモクラスは、 名前のコレクションとして保存されているNamesRepositoryNamesRepositoryを印刷するエンティティクラスを使用します。
ステップ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 名前:ジョン 名前:ジュリー 名前:ローラ・