I am currently using the Builder pattern, following closely the Java implementation suggested in the Wikipedia article Builder pattern http://en.wikipedia.org/wiki/
You need:
public class MySophisticatedObject extends MyPrimitiveObject {
private String description;
public static class SofisitcatedBuilder extends Builder {
private final MySophisticatedObject obj = new MySophisticatedObject();
public MyPrimitiveObject build() { return obj; }
public Builder setDescription(String val) {
obj.description = val;
return this;
}
}
public MySophisticatedObject (String someDescription) {
// this should be the returned object from build() !!
return new SofisitcatedBuilderBuilder()
.setDescription(someDescription)
.setidentifier(generateUUID()).build()
}
}