Em muitos projetos e inclusive em libs importadas no projeto, o padrão builder parece ser um pouco diferente. No caso, eles usam uma inner class Builder dentro da classe modelo ao invés de criar uma segunda classe, por exemplo:
NotaFiscal nf = new NotaFiscal.Builder().m1().m2().m3().build();
Desta forma, os construtores e muitos métodos da classe modelo podem ser private. Qual seria o melhor padrão a se usar?