2011年1月26日水曜日

[Java] コンストラクタパラメタが多い場合はビルダーを使う

テレスコーピングコンストラクタの問題
・ほしいインスタンスを作るまでに複数のsetterを呼ぶためバグを引き起こしやすい。
・バグが発生した場合、デバッグが難しい。


// ビルダークラス
// ビルダークラス
public class Kinoshita {
private String name;
private String address;
private Integer age;
private Integer footSize;
private Integer heigth;

public static class Builder {

private String name;
private String address;
private Integer age;
private Integer footSize;
private Integer heigth;

public Builder(String name) {
this.name = name;
}

public Builder address(String address) {
this.address = address;
return this;
}

public Builder age(Integer age) {
this.age = age;
return this;
}

public Builder footSize(Integer footSize) {
this.footSize = footSize;
return this;
}

// 以下省略
public Kinoshita build() {
return new Kinoshita(this);
}
}

private Kinoshita(Builder builder) {

name = builder.name;
age = builder.age;
footSize = builder.footSize;
address = builder.address;
}
}

}


こうすることで

class UserKinoshita {
Kinoshita k = new Kinoshita.Builder("木下").age(100).footSize(50)
.address("東京都").build();
}

とかけます。
非常に見やすいですし、build()呼び出し時にチェックを入れることでフィールドをチェックすることもできます。


http://yoshio.velvet.jp/syswiki/%A5%B3%A5%F3%A5%B9%A5%C8%A5%E9%A5%AF%A5%BF%A5%D1%A5%E9%A5%E1%A5%BF%A4%AC%C2%BF%A4%A4%BE%EC%B9%E7%A4%CF%A5%D3%A5%EB%A5%C0%A1%BC%A4%F2%BB%C8%A4%A6/

0 コメント:

コメントを投稿