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.
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.