Con l'avvento dell'architettura orientata ai servizi (SOA), sempre più organizzazioni utilizzano servizi di terze parti per i propri sistemi aziendali. Queste aziende devono stare al passo con un ambiente aziendale in rapida evoluzione, il che può significare abbandonare i servizi di un fornitore di servizi per un altro.
In tali casi, l'architettura esistente di un'azienda potrebbe essere incompatibile con quella di un nuovo fornitore. Invece di sprecare mesi a riscrivere il codice aziendale per renderlo compatibile con il nuovo software, un'azienda può utilizzare il modello di progettazione dell'adattatore.
Qual è il modello di progettazione dell'adattatore?
Il modello adattatore consente alle classi che hanno interfacce incompatibili di lavorare insieme. Lo fa convertendo l'interfaccia di una classe esistente (o software) in quella che un client (o servizio) si aspetta. Esistono due tipi di adattatori: adattatori oggetto e adattatori classe.
L'object adapter utilizza la composizione per avvolgere l'adattato con l'adapter, producendo effettivamente l'interfaccia che il client si aspetta. Quindi, se il client si aspetta una stringa, l'adattatore prenderà un numero intero (l'adattato) e gli darà le caratteristiche di una stringa.
Il diagramma di classe precedente rappresenta l'adattatore oggetti. IL classe adattatore implementa il interfaccia di destinazione, ottenendo effettivamente l'accesso a tutti i metodi dell'interfaccia. Quindi adatta un adattato e lo avvolge adattato con il interfaccia di destinazione metodi.
L'adattatore di classe utilizza l'ereditarietà multipla, in cui la classe dell'adattatore è la sottoclasse sia dell'adattato che della classe di destinazione. Il diagramma di classe seguente rappresenta l'adattatore di classe, che è possibile utilizzare liberamente nei linguaggi di programmazione che supportano l'ereditarietà multipla.
Implementazione del modello di progettazione dell'adattatore in Java
Questa applicazione implementerà l'adattatore oggetti. Questa applicazione di esempio simulerà un'organizzazione finanziaria che passa dall'uso e dall'elaborazione delle carte di addebito alle carte di credito. Questa organizzazione utilizzava originariamente la seguente interfaccia della carta di addebito:
pubblicointerfacciaChargeCard{
pubblicovuotomensileSaldo();
pubblicovuotolateFee();
pubblicovuotoTassa annuale();
}
Un tipo popolare di carta di addebito elaborata dal sistema di questa organizzazione è la carta plum:
pubblicoclassePrugnaCardimplementaChargeCard{
privatoint cartaNo;
privato Stringa nomecliente;
privatoDoppio bilancia;// costruttore primario
pubblicoPrugnaCard(int cardNo, stringa nomecliente, Doppio bilancia){
Questo.cardNo = cardNo;
Questo.nomecliente = nomecliente;
Questo.balance = equilibrio;
}
// getter e setter
pubblicointgetCardNo(){
ritorno cartaNo;
}
pubblicovuotosetCardNo(int cartaNo){
Questo.cardNo = cardNo;
}
pubblico Corda getNomeCliente(){
ritorno Nome del cliente;
}
pubblicovuotosetCustomerName(Stringa nomecliente){
Questo.nomecliente = nomecliente;
}
pubblicoDoppiogetBalance(){
ritorno bilancia;
}
pubblicovuotosetBalance(Doppio bilancia){
Questo.balance = equilibrio;
}
@Oltrepassare
pubblicovuotomensileSaldo(){
System.out.println("A gennaio " + Questo.nomecliente + " speso " + Questo.bilancia);
}
@Oltrepassare
pubblicovuotolateFee(){
System.out.println(Questo.nomecliente + "il ritardo mensile è di $ 80,00");
}
@Oltrepassare
pubblicovuotoTassa annuale(){
System.out.println(Questo.nomecliente + "la quota annuale è di $ 200,00");
}
}
Questo istituto finanziario sta passando alle carte di credito e sta eliminando gradualmente le carte di addebito, quindi alcuni dei loro clienti ora hanno carte di credito:
pubblicointerfacciaCarta di credito{
pubblicovuotopagamento minimo mensile();
pubblicovuotointeresse();
pubblicovuotoTassa annuale();
}
Il sistema aziendale dell'istituto finanziario ora elabora solo carte di credito, poiché sta cercando di interrompere l'uso delle carte di addebito nel prossimo anno. Ma la maggior parte dei loro clienti utilizza ancora carte di credito. Quindi, gli ingegneri hanno deciso che era meglio implementare un adattatore fino a quando tutti i loro clienti non fossero passati a una carta di credito.
pubblicoclasseChargeCardAdapterimplementaCarta di credito{
ChargeCardchargeCard;pubblicoChargeCardAdapter(ChargeCard chargeCard){
Questo.chargeCard = chargeCard;
}@Oltrepassare
pubblicovuotopagamento minimo mensile(){
Questo.chargeCard.monthlyBalance();
}@Oltrepassare
pubblicovuotointeresse(){
Questo.chargeCard.lateFee();
}
@Oltrepassare
pubblicovuotoTassa annuale(){
Questo.chargeCard. Tassa annuale();
}
}
Questo ChargeCardAdapter Classe Java implementa la carta di credito Interfaccia Java. Adatta ChargeCard (l'adattato), conferendole le caratteristiche di una carta di credito. Ad esempio, il sistema elaborerà la commissione per gli interessi di una carta di credito, che è la commissione per il ritardo di un cliente con carta di addebito che non ha ancora effettuato la conversione.
Vantaggi dell'utilizzo del modello adattatore
Il principale vantaggio dell'utilizzo del modello dell'adattatore è che consente ai client di utilizzare nuovi servizi, librerie e funzionalità senza modificare il codice. Ciò promuove la scalabilità dell'applicazione.
Un altro vantaggio è che questo modello è anche flessibile. Il modello di adattatore fornisce due metodi di implementazione: adattatori di oggetti e adattatori di classe.