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.