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.