Caraca ainda não me convence esse padrão builder, me parece o mesmo que o factory. Alguém tem um exemplo legal que melhor diferencie?
Determinados padrões são assim mesmo. Você demora até encontrar um caso em que ele se encaixe. Eu mesmo nunca usei o Builder e utilizo pouco o AbstractFactory e faço uso constante do Factory Method
Mais ou menos assim:
O Factory fornecem métodos que retornam instâncias do objeto desejado. Pode ser um singleton ou mesmo uma classe com métodos estáticos.
Exemplo: DriverManager.getConnection()
Já o Builder permite ir “montando” o objeto. Cria-se uma instância do Builder, e nela vai-se armazenando os valores ou atributos; no final é chamado um método para validar os dados e gerar o objeto desejado.
Exemplo: StringBuilder / StringBuffer
O Builder tem casos de uso fortes em desenvolvimento de DSL’s. Por exemplo, extraindo um código de configuração do Apache Camel:
from("seda:foo").startupOrder(1).to("mock:result");
Enquanto que, em Factory, você tem que dar todas os dados para sua configuração de uma vez só, em Builder você consegue fazer de pouco em pouco. Isso pode ser uma frescura em vários casos, enquanto que em outros, pode ser uma verdadeira mão na roda, se você só puder ir adicionando configurações pouco a pouco.
[]'s