Skip to content

Instantly share code, notes, and snippets.

@alexjosesilva
Last active February 22, 2024 11:42
Show Gist options
  • Save alexjosesilva/bf419b5d57bfc54ad6aa5dab63648c93 to your computer and use it in GitHub Desktop.
Save alexjosesilva/bf419b5d57bfc54ad6aa5dab63648c93 to your computer and use it in GitHub Desktop.
Adapter
// Interface alvo (target)
interface Pessoa {
String getNome();
String getIdentificador();
}
// Classe adaptada - Pessoa Física
class PessoaFisica {
private String nome;
private String cpf;
public PessoaFisica(String nome, String cpf) {
this.nome = nome;
this.cpf = cpf;
}
public String getNome() {
return nome;
}
public String getCpf() {
return cpf;
}
}
// Classe adaptada - Pessoa Jurídica
class PessoaJuridica {
private String nomeFantasia;
private String cnpj;
public PessoaJuridica(String nomeFantasia, String cnpj) {
this.nomeFantasia = nomeFantasia;
this.cnpj = cnpj;
}
public String getNomeFantasia() {
return nomeFantasia;
}
public String getCnpj() {
return cnpj;
}
}
// Adapter para Pessoa Física
class PessoaFisicaAdapter implements Pessoa {
private PessoaFisica pessoaFisica;
public PessoaFisicaAdapter(PessoaFisica pessoaFisica) {
this.pessoaFisica = pessoaFisica;
}
@Override
public String getNome() {
return pessoaFisica.getNome();
}
@Override
public String getIdentificador() {
return pessoaFisica.getCpf();
}
}
// Adapter para Pessoa Jurídica
class PessoaJuridicaAdapter implements Pessoa {
private PessoaJuridica pessoaJuridica;
public PessoaJuridicaAdapter(PessoaJuridica pessoaJuridica) {
this.pessoaJuridica = pessoaJuridica;
}
@Override
public String getNome() {
return pessoaJuridica.getNomeFantasia();
}
@Override
public String getIdentificador() {
return pessoaJuridica.getCnpj();
}
}
// Classe principal para testar o padrão Adapter
public class Main {
public static void main(String[] args) {
// Criando objetos das classes adaptadas
PessoaFisica pessoaFisica = new PessoaFisica("João", "123.456.789-00");
PessoaJuridica pessoaJuridica = new PessoaJuridica("Empresa XYZ", "12.345.678/0001-90");
// Adaptando objetos para a interface alvo (target)
Pessoa adaptada1 = new PessoaFisicaAdapter(pessoaFisica);
Pessoa adaptada2 = new PessoaJuridicaAdapter(pessoaJuridica);
// Testando a interface alvo com os objetos adaptados
System.out.println("Pessoa Física:");
System.out.println("Nome: " + adaptada1.getNome());
System.out.println("Identificador: " + adaptada1.getIdentificador());
System.out.println();
System.out.println("Pessoa Jurídica:");
System.out.println("Nome: " + adaptada2.getNome());
System.out.println("Identificador: " + adaptada2.getIdentificador());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment