2016年9月8日木曜日

Builderパターン

みなさん こんばんは。

今日はBuilderパターンを見ていきましょう。

Builderパターンとはその名の通り建築物を作るかのようにオブジェクトを作るパターンと言いま

しょうか。

言葉で説明するより、さっそくどんな感じなのか見ていきましょう。
以下、Builderパターンのクラス図

// 車クラス クラス図Productに該当
public class Car {

private String engin;

private String taiya;

private String name;

public String getEngin() {
return engin;
}

public void setEngin(String engin) {
this.engin = engin;
}

public String getTaiya() {
return taiya;
}

public void setTaiya(String taiya) {
this.taiya = taiya;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String toString(){
return "「 チーム名 "+getName()+" : エンジン "+getEngin()+" : タイヤ "+getTaiya()+" 」";
}
}

// ビルダー クラス図Builderに該当
public interface Builder {

void buildEngin();

void buildTaiya();

void buildName();

Car getResult();
}

//ビルダー実装クラス1 クラス図ConcreateBuilderに該当
public class McLarenBulder implements Builder {

private Car car;

public McLarenBulder(){
this.car = new Car();
}

@Override
public void buildEngin() {
this.car.setEngin("ホンダ");
}

@Override
public void buildTaiya() {
this.car.setTaiya("ブリジストン");
}

@Override
public void buildName() {
this.car.setName("マクラーレン");
}

@Override
public Car getResult() {
return this.car;
}
}

// ビルダー実装クラス2 クラス図ConcreateBuilderに該当
public class FerrariBuilder implements Builder {

private Car car;

public FerrariBuilder(){
this.car = new Car();
}
@Override
public void buildEngin() {
this.car.setEngin("フェラーリ");
}

@Override
public void buildTaiya() {
this.car.setTaiya("ピレリ");
}

@Override
public void buildName() {
this.car.setName("フェラーリ");
}

@Override
public Car getResult() {
return this.car;
}
}

// ディレクター クラス図Directorに該当
public class Director {

private Builder builder; // Has-a関係

public Director(Builder builder){
this.builder = builder;
}

public Car constructFoumura1(){
this.builder.buildEngin();
this.builder.buildTaiya();
this.builder.buildName();
return this.builder.getResult();
}
}

// クライアントクラス
public class Client_BuilderTest {

public static void main(String[] args) {
Director d1 = new Director(new McLarenBulder());
Director d2 = new Director(new FerrariBuilder());
Car mcLaren = d1.constructFoumura1();
Car ferrari = d2.constructFoumura1();
System.out.println(mcLaren);
System.out.println(ferrari);
}
}

実行結果
「 チーム名 マクラーレン : エンジン ホンダ : タイヤ ブリジストン 」
「 チーム名 フェラーリ : エンジン フェラーリ : タイヤ ピレリ 」

クライアントクラスでマクラーレンとフェラーリBuilderをDirectorに渡して、

DirectorがconcreateFoumura1()メソッドを呼び出すと、エンジンとタイヤの付いたF1カーが

返却されます。本例は簡単な例でしたが、本来はもっと複雑な複合構造のオブジェクト生成物が返

却されるでしょう。




人気ブログランキングへ

0 件のコメント:

コメントを投稿