I know there are several questions about the builder pattern. 
 - Use builder pattern from the constructor in a subclass 
 - When would you use the builder pattern 
 - Java improving builder pattern on a specific class 
 - Builder design pattern why do we need a director
So far I used the builder pattern like descripted in Bloch Item 2.
Yesterday I changed some small detail. I added a public constructor for the default values. So you could use both the Builder for a complex object or a constructor for simple object with the necessary values.
public class Blub {
  private final String id;
  public Blub( final String id ) {
    this( Blub.Builder(id) );
  }
  private Blub( Builder builder ) {
    this.id = builder.id; 
  }
  public static class Builder {
    private final String id;
    public Builder( final String id ) {
      this.id = id;
    }
    public Blub build() {
      return new Blub(this);
    }      
  }
}
But I am not sure if this has a design flaw. Because if I finalize the class I'm sure there are no disadvantages. So in the easy case, it would be possible to do call the Blub constructor.
new Blub("1a");
instead of
(new Blub.Builder("1a")).build();
But if I don't finalize the class it would be possible to extend it and do all kind of stuff in the new constructor. And I am not sure if there are no cases to mess this up now. Any idea?
 
     
     
    