以下は、Employee オブジェクトを生成する Builder パターン クラスです。
public class Employee {
// required parameters
private String HDD;
private String RAM;
// optional parameters
private boolean isGraphicsCardEnabled;
private boolean isBluetoothEnabled;
public String getHDD() {
return HDD;
}
public String getRAM() {
return RAM;
}
public boolean isGraphicsCardEnabled() {
return isGraphicsCardEnabled;
}
public boolean isBluetoothEnabled() {
return isBluetoothEnabled;
}
private Employee(EmployeeBuilder builder) {
this.HDD=builder.HDD;
this.RAM=builder.RAM;
this.isGraphicsCardEnabled=builder.isGraphicsCardEnabled;
this.isBluetoothEnabled=builder.isBluetoothEnabled;
}
public static class EmployeeBuilder {
private String HDD;
private String RAM;
// optional parameters
private boolean isGraphicsCardEnabled;
private boolean isBluetoothEnabled;
public EmployeeBuilder(String hdd, String ram){
this.HDD = hdd;
this.RAM = ram;
}
public EmployeeBuilder isGraphicsCardEnabled(Boolean isGraphicsCardEnabled){
this.isGraphicsCardEnabled = isGraphicsCardEnabled;
return this;
}
public EmployeeBuilder isBluetoothEnabled(boolean isBluetoothEnabled){
this.isBluetoothEnabled = isBluetoothEnabled;
return this;
}
public Employee build(){
return new Employee(this);
}
}
public static void main(String args[]){
Employee emp = new Employee.EmployeeBuilder("500", "64").
isGraphicsCardEnabled(true).
isGraphicsCardEnabled(true).build();
System.out.println(emp.HDD);
System.out.println(emp.getHDD());
}
}
パラメータが設定されたビルダーは罰金を科しAbstract Factory [Gamma95, p. 87]
ます。つまり、クライアントはそのようなbuilder
をメソッドに渡して、メソッドがクライアント用に 1 つ以上のオブジェクトを作成できるようにすることができます。この使用法を有効にするには、ビルダーを表す型が必要です。リリース 1.5 以降のリリースを使用している場合は、single generic type (Item 26)
ビルドするオブジェクトのタイプに関係なく、すべてのビルダーで十分です。
上記の段落に実際の例を使用して、誰でも光を追加できますか。私は、Effective Java - Joshua Blochから取られた上記のパラグラフを理解できません。