Design-pattern-iterator-pattern
提供:Dev Guides
デザインパターン-イテレータパターン
イテレータパターンは、Javaおよび.Netプログラミング環境で非常に一般的に使用されるデザインパターンです。 このパターンは、基礎となる表現を知る必要なく、コレクションオブジェクトの要素にシーケンシャルにアクセスする方法を取得するために使用されます。
イテレータパターンは、動作パターンカテゴリに分類されます。
実装
ナビゲーションメソッドをナレーションする_Iterator_インターフェイスと、イテレータを再実行する_Container_インターフェイスを作成します。 _Container_インターフェースを実装する具体的なクラスは、_Iterator_インターフェースを実装して使用する責任があります。
デモクラス_IteratorPatternDemo_は、_NamesRepository_にコレクションとして保存されている_Names_を印刷するための具体的なクラス実装である_NamesRepository_を使用します。
ステップ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