スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Iteratorパターン

Iteratorパターン
中身を知らなくとも、順々にアクセスできる。

2つのインターフェースを用意する。

public interface Aggregate {
public abstract Iterator iterator();
}
public interface Iterator {
public abstract boolean hasNext();
public abstract Object next();
}


以下の通りにクラスを用意する。

public class Fruit {
private String name;
private int price;

public Fruit(String name, int price){
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
import java.util.ArrayList;

public class FruitList implements Aggregate{
private ArrayList fruits;
public FruitList(){
this.fruits = new ArrayList();
}
@Override
public Iterator iterator() {
// TODO 自動生成されたメソッド・スタブ
return new FruitListIterator(this);
}
public int getLength(){
return fruits.size();
}
public Fruit getFruitAt(int index){
return fruits.get(index);
}
public void addFruit(Fruit fruit){
this.fruits.add(fruit);
}

}
public class FruitListIterator implements Iterator{

private FruitList fruitlist;
private int index;

public FruitListIterator(FruitList fruitlist){
this.fruitlist = fruitlist;
this.index = 0;
}
@Override
public boolean hasNext() {
if(this.index < fruitlist.getLength()){
return true;
}else{
return false;
}
}

@Override
public Object next() {
Fruit fruit = fruitlist.getFruitAt(index);
index++;
return fruit;
}
}


これを実行する。

public class Main{
public static void main(String[] args){
FruitList fruitlist = new FruitList();

fruitlist.addFruit(new Fruit("apple",300));
fruitlist.addFruit(new Fruit("orange",200));
fruitlist.addFruit(new Fruit("strawberry", 400));

FruitListIterator itr = (FruitListIterator)fruitlist.iterator();
while(itr.hasNext()){
Fruit fruit = (Fruit)itr.next();
System.out.println(fruit.getName());
}
}
}

このMainクラスの繰り返し部分の中で、FruitList、FruitListIterator特有の処理を知る必要はないので、
再利用に適しているとされる。当然、hasnext(),next()の存在は知っている必要がある。
スポンサーサイト
プロフィール

tjnet777

Author:tjnet777
Solaris, VPNのサポート業務を1年

金融系SIerで業務アプリの開発、メンテを3年半

離職して大学院大学 1年生

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。