#5 DP: Adapter

O que é? O Adapter é um padrão de projeto estrutural que tem como objetivo "traduzir" ou adaptar o funcionamento de um código X para que seja compatível com o código Y. Imagine que você tem várias classes de pagamento que implementam uma interface comum chamada Pagamento — por exemplo: Pix, Ted e Boleto. Agora, sua equipe precisa integrar uma nova forma de pagamento, como PayPal, desenvolvida por outra squad ou vinda de uma biblioteca de terceiros. Essa classe PayPal não implementa a interface Pagamento, e isso quebraria o padrão da sua aplicação. Para resolver esse problema sem modificar a biblioteca externa (o que muitas vezes nem é possível), usamos o padrão Adapter, que atua como um "tradutor" entre as interfaces. Ele faz com que a classe PayPal seja compatível com a interface Pagamento, sem que a classe original precise ser alterada. Exemplo: public interface Pagamento { void pagar(double valor); } // CLASSE EXTERNA( NAO MODIFICAVEL) public class PayPalApi { public void sendPayment(double amount) { System.out.println("Pagamento de R$" + amount + " feito via PayPal."); } } // Adapter mantendo o padrão de pagamentos // Invoca a biblioteca terceira public class PayPalAdapter implements Pagamento { private PayPalApi paypal; public PayPalAdapter(PayPalApi paypal) { this.paypal = paypal; } @Override public void pagar(double valor) { paypal.sendPayment(valor); // adapta a chamada } }

May 3, 2025 - 14:24
 0
#5 DP: Adapter

O que é?

O Adapter é um padrão de projeto estrutural que tem como objetivo "traduzir" ou adaptar o funcionamento de um código X para que seja compatível com o código Y.

Imagine que você tem várias classes de pagamento que implementam uma interface comum chamada Pagamento — por exemplo: Pix, Ted e Boleto.

Agora, sua equipe precisa integrar uma nova forma de pagamento, como PayPal, desenvolvida por outra squad ou vinda de uma biblioteca de terceiros. Essa classe PayPal não implementa a interface Pagamento, e isso quebraria o padrão da sua aplicação.

Para resolver esse problema sem modificar a biblioteca externa (o que muitas vezes nem é possível), usamos o padrão Adapter, que atua como um "tradutor" entre as interfaces. Ele faz com que a classe PayPal seja compatível com a interface Pagamento, sem que a classe original precise ser alterada.

Exemplo:

public interface Pagamento {
    void pagar(double valor);
}

// CLASSE EXTERNA( NAO MODIFICAVEL)
public class PayPalApi {
    public void sendPayment(double amount) {
        System.out.println("Pagamento de R$" + amount + " feito via PayPal.");
    }
}

// Adapter mantendo o padrão de pagamentos 
// Invoca a biblioteca terceira
public class PayPalAdapter implements Pagamento {
    private PayPalApi paypal;

    public PayPalAdapter(PayPalApi paypal) {
        this.paypal = paypal;
    }

    @Override
    public void pagar(double valor) {
        paypal.sendPayment(valor); // adapta a chamada
    }
}