No desenvolvimento de software, é frequente precisarmos integrar bibliotecas de terceiros ou sistemas legados que possuem interfaces diferentes daquelas que nossa aplicação utiliza. O Adapter é um padrão de projeto estrutural que resolve esse conflito, permitindo que objetos com interfaces incompatíveis colaborem entre si. Ele age como um “tradutor” ou wrapper, interceptando chamadas do seu código e as convertendo para um formato que a classe alvo (ou biblioteca de terceiros) consiga entender.

Como Funciona na Prática Link para o cabeçalho

Para implementar o Adapter em PHP, você geralmente utiliza a técnica de composição. Você cria uma classe que implementa a interface que o seu sistema já espera (o Target() e injeta dentro dela a dependência que possui a interface incompatível.

Imagine que o seu sistema está habituado a processar pagamentos através de um método realizarPagamento(), mas você precisa usar um gateway de terceiros que exige o método executarTransacaoViaApi().

Exemplo de Implementação Link para o cabeçalho

// 1. A interface que o seu sistema espera e entende
interface Pagavel {
    public function realizarPagamento(float $valor): void;
}

// 2. A classe de terceiros (incompatível com o seu sistema)
class ServicoDePagamentoExterno {
    public function executarTransacaoViaApi(float $quantia): void {
        echo "Pagamento de R$ {$quantia} processado pelo sistema externo.";
    }
}

// 3. O Adapter que faz a ponte entre os dois
class PagamentoAdapter implements Pagavel {
    private ServicoDePagamentoExterno $servicoExterno;

    public function __construct(ServicoDePagamentoExterno $servicoExterno) {
        $this->servicoExterno = $servicoExterno;
    }

    public function realizarPagamento(float $valor): void {
        // Traduz a chamada para o método exigido pelo serviço externo
        $this->servicoExterno->executarTransacaoViaApi($valor);
    }
}

// 4. Como você utiliza no seu código:
$servicoExterno = new ServicoDePagamentoExterno();
$adapter = new PagamentoAdapter($servicoExterno);

// O sistema cliente chama 'realizarPagamento', sem saber do 'executarTransacaoViaApi'
$adapter->realizarPagamento(150.00);

Benefícios do Padrão Link para o cabeçalho

  • Desacoplamento: O código cliente permanece isolado das peculiaridades da API externa.

  • Flexibilidade: Você pode substituir o serviço de terceiros ou atualizar a interface original sem precisar modificar toda a lógica de negócio do seu sistema.

  • Manutenibilidade: Segue o Princípio de Responsabilidade Única, mantendo a lógica de tradução contida apenas na classe do Adapter.