Prévia do material em texto
Adapter O padrão Adapter é um dos padrões de design estruturais que permite a interoperabilidade entre interfaces incompatíveis. Ele atua como um intermediário, permitindo que classes que não podem interagir diretamente se comuniquem, adaptando a interface de uma classe para outra. A seguir, apresento uma série de perguntas sobre o padrão Adapter, incluindo uma pergunta discursiva e três de múltipla escolha. Pergunta Discursiva: 1. Explique o que é o padrão Adapter, como ele funciona e quais são suas principais aplicações em projetos de software. Dê um exemplo prático de uso do padrão Adapter em um contexto de desenvolvimento. Resposta: O padrão Adapter é um padrão de design estrutural que permite que objetos com interfaces incompatíveis trabalhem juntos. Ele é especialmente útil quando se deseja integrar novas funcionalidades em um sistema existente, utilizando classes que não seguem a interface esperada. O padrão Adapter funciona como uma ponte entre duas interfaces, permitindo que uma classe chamada de "cliente" interaja com uma classe chamada de "adaptee" por meio de uma interface comum. A principal vantagem do padrão Adapter é a sua capacidade de promover a reutilização de código e a flexibilidade. Ele permite que sistemas antigos sejam integrados com novas funcionalidades sem a necessidade de modificar o código existente, o que é especialmente importante em sistemas legados. O padrão Adapter pode ser implementado de duas maneiras: Adapter de Classe e Adapter de Objeto. O Adapter de Classe utiliza herança para estender a funcionalidade de uma classe existente, enquanto o Adapter de Objeto compõe uma instância de uma classe existente dentro de uma nova classe adaptadora. Um exemplo prático do uso do padrão Adapter pode ser encontrado em sistemas que interagem com diferentes APIs externas. Suponha que um aplicativo tenha uma classe que usa uma API de pagamento específica, mas a empresa decide mudar para uma nova API que possui uma interface diferente. O padrão Adapter pode ser usado para criar uma nova classe que adapta a interface da nova API à interface que o aplicativo já está utilizando. Abaixo, um exemplo em Java: java af://n4592 af://n4595 // Interface esperada pelo cliente public interface PaymentProcessor { void processPayment(double amount); } // Classe de adaptee que possui uma interface diferente public class OldPaymentGateway { public void pay(double amount) { System.out.println("Payment of $" + amount + " processed by Old Payment Gateway."); } } // Classe adapter que adapta a interface da classe OldPaymentGateway public class PaymentAdapter implements PaymentProcessor { private OldPaymentGateway oldPaymentGateway; public PaymentAdapter(OldPaymentGateway oldPaymentGateway) { this.oldPaymentGateway = oldPaymentGateway; } @Override public void processPayment(double amount) { oldPaymentGateway.pay(amount); } } // Uso do padrão Adapter public class Main { public static void main(String[] args) { OldPaymentGateway oldGateway = new OldPaymentGateway(); PaymentProcessor paymentProcessor = new PaymentAdapter(oldGateway); paymentProcessor.processPayment(100.00); // Saída: Payment of $100.0 processed by Old Payment Gateway. } } Neste exemplo, a interface PaymentProcessor define o método que o cliente espera usar. A classe OldPaymentGateway é a implementação existente com uma interface diferente. A classe PaymentAdapter atua como um adaptador que implementa a interface PaymentProcessor e delega a chamada ao método pay da classe OldPaymentGateway. Assim, o cliente pode usar a nova implementação sem precisar modificar seu código. Perguntas de Múltipla Escolha: 2. Qual é a principal finalidade do padrão Adapter? A) Permitir que classes com interfaces incompatíveis trabalhem juntas. B) Criar uma única interface para várias classes. C) Fornecer um mecanismo para a criação de instâncias de classes. D) Garantir que um sistema seja independente de sua implementação. Resposta: A) Permitir que classes com interfaces incompatíveis trabalhem juntas. 3. Qual dos seguintes é um exemplo de onde o padrão Adapter poderia ser utilizado? af://n4606 A) Quando é necessário modificar uma classe existente para adicionar novos métodos. B) Quando se deseja integrar um novo módulo em um sistema legado que possui uma interface diferente. C) Quando um sistema precisa ser escalável e fácil de manter. D) Quando se deseja criar uma interface comum para classes com funcionalidades semelhantes. Resposta: B) Quando se deseja integrar um novo módulo em um sistema legado que possui uma interface diferente. 4. Como o padrão Adapter pode ser implementado? A) Apenas por meio de herança. B) Apenas por meio de composição. C) Tanto por herança quanto por composição. D) Apenas por meio de interfaces. Resposta: C) Tanto por herança quanto por composição. Essas perguntas abordam os aspectos fundamentais do padrão Adapter, incluindo sua definição, benefícios, aplicações práticas e implementações, proporcionando uma visão abrangente sobre o tema.