Duvida-caelum-java-objetos

Por favor gostaria que alguém me indicasse algum material explicando o uso da classe builder…
que consta nos exemplos da apostila caelum-java-objetos…

não encontrei pesquisando em função de estar me preparando para um teste e estar com um pouco de pressa de antemão obrigado.

“Builder” é um pattern onde uma classe “auxiliar” é usada pra facilitar a instanciação de objetos que tem muitos atributos obrigatórios. Normalmente você usa os patterns “Builder” e “Fluent Interface” (como é o caso da classe StringBuilder).

Por exemplo, imagina que você tem uma classe Pessoa que só pode ser instanciada se for fornecido todos os dados da Pessoa:

class Pessoa {
	
	String nome;
	String sobrenome;
	int idade;
	double altura;
	double peso;
	
	Pessoa (String nome, String sobrenome, int idade, double altura, double peso) {
		this.nome = nome;
		this.sobrenome = sobrenome;
		this.idade = idade;
		this.altura = altura;
		this.peso = peso;
	}
	
}

Imagina a dificuldade em se instanciar esta classe, são 5 atributos inicializados junto com o construtor, é muito fácil errar a ordem:

Pesosa p = new Pessoa("Fabio","Nascimento",27,1.74,75.0);

Usando o pattern de Builder, voce criaria uma classe auxiliar pra isso, com os atributos que serão inicializados e com métodos pra te ajudar:

class PessoaBuilder {
	
	String nome;
	String sobrenome;
	int idade;
	double altura;
	double peso;
	
	void nome(String nome) { this.nome = nome; }
	void sobrenome(String sobrenome) { this.sobrenome = sobrenome; }
	void idade(int idade) { this.idade = idade; }
	void altura (double altura) { this.altura = altura; }
	void peso (double peso) { this.peso = peso; }
	
	Pessoa constroiPessoa() {
		return new Pessoa(nome,sobrenome,idade,altura,peso);
	}
	
}

PessoaBuilder pb = new PessoaBuilder();
pb.nome("Fabio");
pb.sobrenome("Nascimento");
pb.idade(27);
pb.altura(1.74);
pb.peso(75.0);
Pessoa p = pb.constroiPessoa();

Usando o pattern Fluent Interface, ficaria melhor ainda:

class PessoaBuilder {
	
	String nome;
	String sobrenome;
	int idade;
	double altura;
	double peso;
	
	PessoaBuilder nome(String nome) { this.nome = nome; return this; }
	PessoaBuilder sobrenome(String sobrenome) { this.sobrenome = sobrenome; return this;  }
	PessoaBuilder idade(int idade) { this.idade = idade; return this;  }
	PessoaBuilder altura (double altura) { this.altura = altura; return this;  }
	PessoaBuilder peso (double peso) { this.peso = peso; return this;  }
	
	Pessoa constroiPessoa() {
		return new Pessoa(nome,sobrenome,idade,altura,peso);
	}
	
}

Pessoa p = new PessoaBuilder().nome("Fabio").sobrenome("Nascimento").altura(1.74).peso(75.0).constroiPessoa();

Acho que é desse Builder que você ta falando, se for, espero ter ajudado :stuck_out_tongue:

valeu Fábio,ótima resposta muito obrigado pela atenção