定義:オブジェクトの内部詳細を公開せずに、コンテナオブジェクト内のさまざまな要素にアクセスする方法を提供します。
タイプ:行動パターン
クラス図:
Javaで最も一般的に使用されるモードを尋ねたい場合、答えはSingletonモードでも、工場モードでも、最初にコードを見てみましょう。
public static void print(collection coll){iteration();この方法の機能は、文字列コレクションループを印刷することであり、イテレーターパターンはJava言語で使用されています。まず、セットにも関連しています。
イテレータパターンの構造
要約コンテナ:一般に、Javaのコレクションインターフェイス、リストインターフェイス、セットインターフェイスなど、Iterator()メソッドが提供されます。
特定のコンテナ:アレイリストを実装するリストインターフェイスの順序付けられたリスト、リンクリストのリンクリストインターフェイスのリンクリスト、ハッシュセットを実装するためのセットインターフェイスのハッシュリストなど、抽象コンテナの具体的な実装クラスです。
抽象的なイテレータ:一般的に言えば、要素を通過するために必要な方法を定義します。最初の要素の最初の()メソッドを取得し、次の要素の次の()メソッドを取得し、トラバーサルのメソッドが現在のオブジェクトの(またはhasnext())、remove()、remove()を決定します。
Iteratorの実装:コレクションの反復を完了するために、Iteratorインターフェイスで定義された方法を実装します。
例を挙げてください
イテレータモード自体の規制は比較的緩いため、特定の実装は多様です。ここで1つの例しか説明しませんが、実装方法を1つずつ提示することはできません。したがって、例を挙げる前に、次のイテレーターパターンの実装方法をリストしましょう。
1。 Iteratorの役割は、トラバーサルのインターフェイスを定義しますが、誰が反復を制御するかを指定しません。 Javaコレクションの適用では、トラバーサルのプロセスはクライアントプログラムによって制御されます。クライアントは、外部イテレーターと呼ばれます。外部イテレータは内部反復剤よりも柔軟で強力であり、内部イテレーターはJavaロケール環境で非常に弱いです。
2。イテレータモードでトラバーサルアルゴリズムを実装する人に対する規定はありません。 Iteratorの役割に実装するのは自然なようです。さまざまなトラバーサルアルゴリズムがコンテナで使用されるのに便利であるため、トラバーサルアルゴリズムを異なる容器に適用するのにも便利です。しかし、これはコンテナのカプセル化を破壊します - コンテナの役割は、Javaでは他のクラスに独自のプライベート属性を公開することを意味する独自のプライベート属性を開示する必要があります。
次に、コンテナの役割に入れて実装しましょう。このようにして、イテレーターの役割は、現在の場所を通過する関数のみを保存するためにオーバーライドされます。しかし、トラバーサルアルゴリズムは特定の容器にしっかりと結合されています。
Javaコレクションの適用では、提供される特定のイテレーターの役割は、コンテナの役割で定義されている内部クラスです。これにより、コンテナのパッケージが保護されます。しかし同時に、コンテナはトラバーサルアルゴリズムインターフェイスも提供し、独自のイテレーターを拡張できます。
OK、Javaコレクションのイテレーターがどのように実装されているかを見てみましょう。
// Iteratorの役割、トラバーサルインターフェイスIterator {boolean hasnext();これは単なるインターフェイスであるため、特定のコンテナロールはリストインターフェイスを実装するアレイリストと他のクラスです。重要なポイントを強調するために、Iterator //特定のイテレーターの役割に関連するコンテンツを参照してください。内部クラスの形で導出されます。 AbstractListは、特定の各コンテナの役割の共通部分を抽出するために存在します。 Public AbstractListは、AbstractCoctoryを拡張します。 ;} public Object next(){ CheckForcomodification = get(cursor ++); tractlist.this.remove(ラストレット); Cursor-;イテレータモードの使用に関して。導入部にリストされているように、クライアントプログラムは最初に特定のコンテナの役割を取得し、次に特定のコンテナの役割を通じて特定のイテレータの役割を取得する必要があります。このようにして、特定のイテレーターの役割を使用してコンテナを通過できます...
イテレータモードの長所と短所
イテレータモードの利点は次のとおりです。
トラバーサル方法は単純化されており、オブジェクトコレクションや順序付けられたリストを通過することは非常に厄介です。 Iteratorメソッドを導入した後、ユーザーが使用しやすくなります。
順序付けられたリストの場合など、多くの方法があります。2つのイテレーターに、ニーズに応じてプラスの順序と逆方向の順序トラバーサルを提供することができます。
カプセル化は良好であり、ユーザーは反復因子をトラバースするだけで済む必要がありますが、横断アルゴリズムを心配する必要はありません。
イテレータパターンの短所:
単純なトラバーサル(配列や順序付けされたリストなど)の場合、イテレーターを使用する方が面倒で、ArrayListのように、ループに使用し、コレクションを通過する方法を取得すると感じるかもしれません。
イテレータモードに適用されるシナリオ
イテレーターパターンは、コレクションを実装する限り、コレクションと同時にコレクションを提供する必要があります。このような新しいコンテナを実装したい場合は、もちろん、容器用のイテレーターを実装するためのイテレーターパターンを導入する必要もあります。
ただし、コンテナとイテレーターの関係は近づきすぎるため、ほとんどの言語は、これらの言語が提供するコンテナとイテレーターを提供することで、ほとんどの場合、既存の容器とイテレーターを使用する必要があります。