Please enable JavaScript.
Coggle requires JavaScript to display documents.
BUILDER - Coggle Diagram
BUILDER
Definição
-
-
-
Usado para encapsular a lógica de construção de um objeto, permitindo que ele seja construído em passos
"Separa a construção de um objeto complexo da sua representação, de modo que o mesmo processo de construção possa criar diferentes representações" (GoF)
Problemas/Desvantagens
-
-
Sempre que necessitar que se crie um novo atributo, o Builder precisará ser atualizado
-
-
Detalhes Implementação
Métodos na classe Builder: sem prefixo, with ou set
Nome do método builder (retorna o objeto): create(), createNomeObjeto(), newNomeObjeto(), build() ou of (quando o Builder é criado como uma inner class, mais usada a partir do Java 9)
Deve-se mudar a visibilidade do construtor, para que o Builder se torne um caminho obrigatório.
Todos os setters do Builder retornam o próprio Builder, permitindo a encadeação da chamada dos setters
Elementos
Builder (interface ou classe abstrata): declara etapas de construção do produto que são comuns a todos os tipos de builders
ConcreteBuilder (Builder Concreto): provém diferentes implementações das etapas de construção. Tem método que retorna o Produto.
Diretor: define a ordem na qual as etapas de construção são chamadas,
-
Soluções Alternativas
-
Usar bibliotecas que geram classes Builder, como o Immutables
Usar a notação Builder do Projeto Lombok
Quando deve ser usado
Quando o processo de construção de um objeto é considerado complexo e também é adequado quando se trata da construção de representações múltiplas de uma mesma classe
-
Propicia o princípio SoC - Separação de Preocupações: separa as regras de negócio da classe do processo de instanciação da mesma. Levando à alta coesão.
Se aplicado pelos motivos corretos, atenderá ao Creator, um dos princípios GRASP (General Responsability Assignment Software Patterns - Padrões de Software para Atribuição de Responsabilidades Gerais), que indica quem deverá responsável pela instanciação de determinados objetos. GRASP é relacionado ao SRP do SOLID.