

Delegamos a instância de objetos para a subclasse
Programar dirigido a interfaces.
Neste padrão, você deve substituir as chamadas diretas (new) de construção de objetos da classe para um método intermediário que fará o papel de fábrica, este método fábrica ou Factory Method, irá controlar como criar os objetos que estendem a sua classe serão intanciados
Os objetos retornados pelo método fábrica são chamados de produtos ou Classes Concretas.
Assim temos em nosso cenário a classe veiculo que implementa a interface Transporte, e as subclasses concetra carros, motos, bicicletas que herdam de Veiculo e implementa os metodos declarados na interface
A limitação fica por conta das subclasses. Caso estas retornem valores diferentes, precisam compartilhar a mesma classe ou inteface base. O método fábrica na classe base deve ter a interface como o seu tipo de retorno.
public class Pessoa {
private String nome;
private String sobrenome;
// Construtor
public Pessoa(String nome, String sobrenome) {
this.nome = nome;
this.sobrenome = sobrenome;
}
// Métodos getters e setters
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSobrenome() {
return sobrenome;
}
public void setSobrenome(String sobrenome) {
this.sobrenome = sobrenome;
}
// Método toString para exibir informações da pessoa
@Override
public String toString() {
return "Pessoa [nome=" + nome + ", sobrenome=" + sobrenome + "]";
}
// Método criarPessoa
public static Pessoa criarPessoa(String nome, String sobrenome) {
return new Pessoa(nome, sobrenome);
}
// Método principal para testar a criação de pessoas
public static void main(String[] args) {
Pessoa pessoaA = criarPessoa("Marco", "Antonio");
Pessoa pessoaB = criarPessoa("Karol", "Calis");
System.out.println(pessoaA);
System.out.println(pessoaB);
}
criarPessoa:
Pessoa, escondendo a complexidade da criação do objeto e centralizando esse processo em um único método.criarPessoa sem afetar o restante do código.Pessoa (main) não precisa saber como esse objeto é criado, apenas que ele é criado de uma certa forma.criarPessoa sem alterar o restante do código que usa o objeto.PessoaFisica e PessoaJuridica), você pode alterar ou sobrecarregar o método criarPessoa para retornar instâncias diferentes dependendo das entradas.