Odată cu creșterea arhitecturii orientate pe servicii (SOA), tot mai multe organizații folosesc servicii terțe pentru sistemele lor de întreprindere. Aceste companii trebuie să țină pasul cu un mediu de afaceri în schimbare rapidă, ceea ce poate însemna abandonarea serviciilor unui furnizor de servicii pentru altul.
În astfel de cazuri, arhitectura existentă a unei afaceri ar putea fi incompatibilă cu cea a unui nou furnizor. În loc să piardă luni întregi rescrierea codului de întreprindere pentru a-l face compatibil cu noul software, o companie poate folosi modelul de design al adaptorului.
Ce este modelul de design al adaptorului?
Modelul adaptorului permite claselor care au interfețe incompatibile să lucreze împreună. Face acest lucru prin conversia interfeței unei clase (sau software) existente într-una la care se așteaptă un client (sau serviciu). Există două tipuri de adaptoare: adaptoare de obiecte și adaptoare de clasă.
Adaptorul de obiect folosește compoziția pentru a împacheta adaptatul cu adaptorul, producând în mod eficient interfața pe care clientul o așteaptă. Deci, dacă clientul așteaptă un șir, adaptorul va lua un număr întreg (adaptatul) și îi va oferi caracteristicile unui șir.
Diagrama de clasă de mai sus reprezintă adaptorul de obiecte. The clasa adaptorului implementează interfață țintă, obținând efectiv acces la toate metodele interfeței. Apoi se adaptează un adaptat și înfășoară asta adaptat cu interfață țintă metode.
Adaptorul de clasă utilizează moștenirea multiplă, unde clasa adaptorului este subclasa atât a destinatarului, cât și a clasei țintă. Diagrama de clasă de mai jos reprezintă adaptorul de clasă, pe care sunteți liber să îl utilizați în limbaje de programare care acceptă moștenirea multiplă.
Implementarea modelului de proiectare a adaptorului în Java
Această aplicație va implementa adaptorul de obiecte. Acest exemplu de aplicație va simula o organizație financiară care trece de la utilizarea și procesarea cardurilor de credit la cardurile de credit. Această organizație a folosit inițial următoarea interfață pentru cardul de taxare:
publicinterfataCard de credit{
publicgollunarBalance();
publicgoltaxă de întârziere();
publicgolTaxă anuală();
}
Un tip popular de card de taxare pe care sistemul acestei organizații îl procesează este cardul plum:
publicclasăPlumCardunelteCard de credit{
privatint cardNu;
privat String customerName;
privatdubla echilibru;// constructor primar
publicPlumCard(int cardNu, String customerName, dubla echilibru){
acest.cardNu = cardNu;
acest.customerName = customerName;
acest.balance = echilibru;
}
// getters și setters
publicintgetCardNr(){
întoarcere cardNu;
}
publicgolsetCardNr(int cardNu){
acest.cardNu = cardNu;
}
public Şir getCustomerName(){
întoarcere Numele clientului;
}
publicgolsetCustomerName(Șir clientNume){
acest.customerName = customerName;
}
publicdublagetBalance(){
întoarcere echilibru;
}
publicgolsetBalance(dubla echilibru){
acest.balance = echilibru;
}
@Trece peste
publicgollunarBalance(){
System.out.println("În ianuarie " + acest.numeclient + " a petrecut " + acest.echilibru);
}
@Trece peste
publicgoltaxă de întârziere(){
System.out.println(acest.numeclient + „Taxa lunară de întârziere este de 80 USD”);
}
@Trece peste
publicgolTaxă anuală(){
System.out.println(acest.numeclient + "Taxa anuală este de 200 USD");
}
}
Această instituție financiară face tranziția la cardurile de credit și elimină treptat cardurile de plată, așa că unii dintre clienții lor au acum carduri de credit:
publicinterfataCard de credit{
publicgollunarMinPayment();
publicgolinteres();
publicgolTaxă anuală();
}
Sistemul de întreprindere al instituției financiare procesează acum doar carduri de credit, deoarece urmărește să întrerupă utilizarea cardurilor de credit în anul viitor. Dar majoritatea clienților lor încă folosesc carduri de plată. Deci, inginerii au decis că cel mai bine este să implementeze un adaptor până când toți clienții lor au trecut la un card de credit.
publicclasăChargeCardAdaptorunelteCard de credit{
ChargeCard chargeCard;publicChargeCardAdaptor(ChargeCard chargeCard){
acest.chargeCard = card de taxă;
}@Trece peste
publicgollunarMinPayment(){
acest.chargeCard.monthlyBalance();
}@Trece peste
publicgolinteres(){
acest.chargeCard.lateFee();
}
@Trece peste
publicgolTaxă anuală(){
acest.card de credit. Taxă anuală();
}
}
Acest ChargeCardAdapter Clasa Java implementează cardul de credit Interfață Java. Adaptează ChargeCard (adaptatul), oferindu-i caracteristicile unui card de credit. De exemplu, sistemul va procesa taxa de dobândă a unui card de credit, care este taxa de întârziere a unui client de card de credit care nu s-a convertit încă.
Avantajele utilizării modelului adaptorului
Avantajul major al utilizării modelului adaptor este că permite clienților să utilizeze noi servicii, biblioteci și caracteristici fără a-și schimba codul. Acest lucru promovează scalabilitatea aplicației.
Un alt avantaj este că acest model este și flexibil. Modelul adaptor oferă două metode de implementare: adaptoare de obiecte și adaptoare de clasă.