Я в настоящее время используется шаблон Builder, в точности следуя реализации Java, предложенной в статье Википедии Шаблон Builderhttp://en.wikipedia.org/wiki/Builder_pattern
Это пример кода, иллюстрирующий мою реализацию
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;
}
}