私は現在、ウィキペディアの記事Builder pattern http://en.wikipedia.org/wiki/Builder_patternで提案されている Java 実装に厳密に従って、Builder パターンを使用しています。
これは、私の実装を説明するサンプル コードです。
public class MyPrimitiveObject {
private String identifier="unknown";
public static class Builder {
private final MyPrimitiveObject obj = new MyPrimitiveObject();
public MyPrimitiveObject build() { return obj; }
public Builder setidentifier (String val) {
obj.identifier = val;
return this;
}
}
public static Builder createBuilder() { return new Builder(); }
@Override public String toString() { return "ID: "+identifier; }
}
このクラスを使用するアプリケーションのいくつかで、たまたま非常によく似た構築コードを見つけたので、サブクラス化MyPrimitiveObject
しMySophisticatedObject
て、繰り返されるすべてのコードをそのコンストラクターに移動することを考えました..ここに問題があります。
スーパークラス Builder を呼び出して、返されたオブジェクトをインスタンスとして割り当てるにはどうすればよいですか?
public class MySophisticatedObject extends MyPrimitiveObject {
private String description;
public MySophisticatedObject (String someDescription) {
// this should be the returned object from build() !!
Builder().setidentifier(generateUUID()).build()
description = someDescription;
}
}