Leitores como você ajudam a apoiar o MUO. Quando você faz uma compra usando links em nosso site, podemos ganhar uma comissão de afiliado. Consulte Mais informação.

Com o surgimento da arquitetura orientada a serviços (SOA), mais e mais organizações estão usando serviços de terceiros para seus sistemas corporativos. Essas empresas precisam acompanhar um ambiente de negócios em rápida mudança, o que pode significar o abandono dos serviços de um provedor de serviços por outro.

Nesses casos, a arquitetura existente de uma empresa pode ser incompatível com a de um novo provedor. Em vez de perder meses reescrevendo o código corporativo para torná-lo compatível com o novo software, uma empresa pode usar o padrão de design do adaptador.

O que é o padrão de projeto do adaptador?

O padrão do adaptador permite que as classes que possuem interfaces incompatíveis trabalhem juntas. Ele faz isso convertendo a interface de uma classe (ou software) existente em uma que um cliente (ou serviço) espera. Existem dois tipos de adaptadores: adaptadores de objeto e adaptadores de classe.

instagram viewer

O adaptador de objeto usa a composição para agrupar o adaptador com o adaptador, produzindo efetivamente a interface que o cliente espera. Então, se o cliente espera uma string, o adaptador pegará um inteiro (o adaptee) e dará a ele as características de uma string.

O diagrama de classe acima representa o adaptador de objeto. O classe do adaptador implementa o interface de destino, obtendo acesso efetivo a todos os métodos da interface. Em seguida, adapta um adaptado e envolve isso adaptado com o interface de destino métodos.

O adaptador de classe usa herança múltipla, onde a classe do adaptador é a subclasse do adaptador e da classe de destino. O diagrama de classe abaixo representa o adaptador de classe, que você pode usar livremente em linguagens de programação que suportam herança múltipla.

Implementando o padrão de design do adaptador em Java

Este aplicativo implementará o adaptador de objeto. Este aplicativo de amostra simulará uma transição de organização financeira do uso e processamento de cartões de cobrança para cartões de crédito. Esta organização originalmente usou a seguinte interface de cartão de cobrança:

públicointerfaceCartão de débito{
públicovazioSaldo mensal();
públicovaziotaxa de atraso();
públicovazioTaxa anual();
}

Um tipo popular de cartão de cobrança que o sistema desta organização processa é o cartão ameixa:

públicoaulaPlumCardimplementosCartão de débito{
privadoint nenhum cartão;
privado String nome do cliente;
privadodobro equilíbrio;

// construtor primário
públicoPlumCard(int cardNo, String nome do cliente, dobro equilíbrio){
esse.cardNo = cardNo;
esse.customerName = customerName;
esse.saldo = saldo;
}

// getters e setters
públicointgetCardNo(){
retornar nenhum cartão;
}

públicovaziosetCardNo(int nenhum cartão){
esse.cardNo = cardNo;
}

público Corda getCustomerName(){
retornar nome do cliente;
}

públicovaziosetCustomerName(String customerName){
esse.customerName = customerName;
}

públicodobrogetBalance(){
retornar equilíbrio;
}

públicovaziosetBalance(dobro equilíbrio){
esse.saldo = saldo;
}

@Sobrepor
públicovazioSaldo mensal(){
System.out.println("Em janeiro " + esse.customerName + " gasto " + esse.equilíbrio);
}

@Sobrepor
públicovaziotaxa de atraso(){
System.out.println(esse.customerName + "taxa de atraso mensal é de $ 80,00");
}

@Sobrepor
públicovazioTaxa anual(){
System.out.println(esse.customerName + "a taxa anual é de $ 200,00");
}
}

Esta instituição financeira está fazendo a transição para cartões de crédito e eliminando gradualmente os cartões de cobrança, então alguns de seus clientes agora têm cartões de crédito:

públicointerfaceCartão de crédito{
públicovaziomensalMinPayment();
públicovaziointeresse();
públicovazioTaxa anual();
}

O sistema corporativo da instituição financeira agora processa apenas cartões de crédito, pois pretende descontinuar o uso de cartões de débito no próximo ano. Mas a maioria de seus clientes ainda usa cartões de crédito. Assim, os engenheiros decidiram que era melhor implementar um adaptador até que todos os seus clientes fizessem a transição para um cartão de crédito.

públicoaulaChargeCardAdapterimplementosCartão de crédito{
ChargeCard chargeCard;

públicoChargeCardAdapter(ChargeCard chargeCard){
esse.chargeCard = chargeCard;
}

@Sobrepor
públicovaziomensalMinPayment(){
esse.chargeCard.monthlyBalance();
}

@Sobrepor
públicovaziointeresse(){
esse.chargeCard.lateFee();
}

@Sobrepor
públicovazioTaxa anual(){
esse.cartão de débito. Taxa anual();
}
}

Este ChargeCardAdapter classe Java implementa o CreditCard Interface Java. Adapta o ChargeCard (o adaptado), dando-lhe as características de um cartão de crédito. Por exemplo, o sistema processará a taxa de juros de um cartão de crédito, que é a taxa atrasada de um cliente de cartão de cobrança que ainda não converteu.

Vantagens de usar o padrão Adapter

A principal vantagem de usar o padrão do adaptador é que ele permite que os clientes usem novos serviços, bibliotecas e recursos sem alterar seu código. Isso promove a escalabilidade do aplicativo.

Outra vantagem é que esse padrão também é flexível. O padrão do adaptador fornece dois métodos de implementação: adaptadores de objeto e adaptadores de classe.