カーソルモードとも呼ばれるイテレータモード。 GOFによって与えられた定義は、オブジェクトの内部詳細を公開せずに、コンテナオブジェクト内のさまざまな要素にアクセスする方法を提供することです。
イテレーターパターンは、次の役割で構成されています。
イテレータの役割:Iteratorの役割は、インターフェイスをアクセスおよびトラバース要素に定義する責任があります。
コンクリートイテレータの役割:特定のイテレーターの役割は、イテレーターインターフェイスを実装し、トラバーサルの現在の場所を記録する必要があります。
コンテナ:コンテナの役割は、特定のイテレータロールを作成するためのインターフェイスを提供する責任があります。
コンクリートコンテナ:特定のコンテナの役割により、インターフェイスを実装して、特定のイテレータロールを作成します。この特定のイテレータの役割は、コンテナの構造に関連しています。
Java実装の例
クラス図:
コード:
/ ** *データストレージのjava.util.collection * @author stone */ public interface icollection <t> {iiterator <t> iterator(); // iterator void add(t t)を返します。 t get(int index); } / ** *カスタムイテレーターインターフェイスは、java.util.iterator *コレクションクラスのトラバースを実行するために使用されるデータに似ています * @author stone * */ public interface iiterator <t> {boolean hasnext(); boolean hasprevious(); t next(); t前(); } / ** *コレクションクラス、Myiteratorに依存 * @Author Stone */ public class myCollection <t> Icollection <t> {private t [] arys; Private int index = -1;プライベートINT容量= 5; public myCollection(){this.arys =(t [])new object [capuation]; } @Override public iiterator <t> iterator(){return new Myiterator <t>(this); } @Override public void add(t t){index ++; if(index ==容量){容量 *= 2; this.arys = arrays.copyof(arys、容量); } this.arys [index] = t; } @Override public t get(int index){return this.arys [index]; }} /**新しいストレージ構造がある場合、そのトラバーサルを実装する新しいiiteratorに対応する新しいIcollection*/ @suppresswarnings({"RawTypes"、 "Unchecked"})public class test {public static void main(string [] args){iCollectrection <integer> = new myColectrection <integer>); add(collection、3、5、8、12、3、3、5); for(iiterator <integer> iterator = collection.iterator(); iterator.hasnext();){system.out.println(iterator.next()); } system.out.println( "--------------------------"); icollection collection2 = new myCollection(); add(collection2、 "a"、 "b"、 "c"、3、8、12、3、5); for(iiterator iterator = collection2.iterator(); iterator.hasnext();){system.out.println(iterator.next()); }} static <t> void add(icollection <t> c、t ... a){for(t i:a){c.add(i); }}}}印刷:
3 5 8 12 3 3 5 ----------------- ABC 3 8 12 3 5