Med fremveksten av tjenesteorientert arkitektur (SOA), bruker flere og flere organisasjoner tredjepartstjenester for sine bedriftssystemer. Disse selskapene må holde tritt med et raskt skiftende forretningsmiljø, noe som kan bety å forlate tjenestene til en tjenesteleverandør for en annen.
I slike tilfeller kan en bedrifts eksisterende arkitektur være uforenlig med den til en ny leverandør. I stedet for å kaste bort måneder på å omskrive bedriftskode for å gjøre den kompatibel med ny programvare, kan en bedrift bruke adapterdesignmønsteret.
Hva er adapterdesignmønsteret?
Adaptermønsteret lar klasser som har inkompatible grensesnitt fungere sammen. Den gjør dette ved å konvertere grensesnittet til en eksisterende klasse (eller programvare) til en som en klient (eller tjeneste) forventer. Det finnes to typer adaptere: objektadaptere og klasseadaptere.
Objektadapteren bruker komposisjon for å pakke adapteren inn med adapteren, og produserer effektivt grensesnittet som klienten forventer. Så hvis klienten forventer en streng, vil adapteren ta et heltall (tilpasseren) og gi den egenskapene til en streng.
gratis bingospill for Android -telefon
Klassediagrammet ovenfor representerer objektadapteren. De adapter klasse implementerer målgrensesnitt , som effektivt får tilgang til alle grensesnittets metoder. Så tilpasser den seg en tilpasset og pakker det inn tilpasset med målgrensesnitt metoder.
Klasseadapteren bruker multippel arv, der adapterklassen er underklassen til både den tilpassede og målklassen. Klassediagrammet nedenfor representerer klasseadapteren, som du står fritt til å bruke i programmeringsspråk som støtter multippel arv.
Implementering av adapterdesignmønsteret i Java
Denne applikasjonen vil implementere objektadapteren. Denne eksempelapplikasjonen vil simulere en finansiell organisasjon som går fra bruk og behandling av betalingskort til kredittkort. Denne organisasjonen brukte opprinnelig følgende betalingskortgrensesnitt:
public interface ChargeCard {
public void monthlyBalance();
public void lateFee();
public void Annualfee();
}
En populær type betalingskort som denne organisasjonens system behandler er plommekortet:
public class PlumCard implements ChargeCard {
private int cardNo;
private String customerName;
private double balance;
// primary constructor
public PlumCard(int cardNo, String customerName, double balance) {
this.cardNo = cardNo;
this.customerName = customerName;
this.balance = balance;
}
// getters and setters
public int getCardNo() {
return cardNo;
}
public void setCardNo(int cardNo) {
this.cardNo = cardNo;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
@Override
public void monthlyBalance() {
System.out.println("In January " + this.customerName + " spent " + this.balance);
}
@Override
public void lateFee() {
System.out.println(this.customerName + " monthly latefee is .00");
}
@Override
public void Annualfee() {
System.out.println(this.customerName + " annual fee is 0.00");
}
}
Denne finansinstitusjonen går over til kredittkort og fase ut betalingskortene, så noen av kundene deres har nå kredittkort:
public interface CreditCard {
public void monthlyMinPayment();
public void interest();
public void Annualfee();
}
Bedriftssystemet for finansinstitusjoner behandler nå bare kredittkort, da det er ute etter å slutte å bruke betalingskort i løpet av det kommende året. Men de fleste av kundene deres bruker fortsatt betalingskort. Så ingeniørene bestemte at det var best å implementere en adapter til alle kundene deres gikk over til et kredittkort.
public class ChargeCardAdapter implements CreditCard {
ChargeCard chargeCard;
public ChargeCardAdapter(ChargeCard chargeCard) {
this.chargeCard = chargeCard;
}
@Override
public void monthlyMinPayment() {
this.chargeCard.monthlyBalance();
}
@Override
public void interest() {
this.chargeCard.lateFee();
}
@Override
public void Annualfee() {
this.chargeCard.Annualfee();
}
}
Denne ChargeCardAdapteren Java klasse implementerer kredittkortet Java-grensesnitt . Den tilpasser ChargeCard (tilpasseren), og gir den egenskapene til et kredittkort. For eksempel vil systemet behandle rentegebyret på et kredittkort, som er forsinkelsesgebyret til en betalingskortkunde som ikke har konvertert ennå.
Fordeler med å bruke adaptermønsteret
Den største fordelen med å bruke adaptermønsteret er at det lar klienter bruke nye tjenester, biblioteker og funksjoner uten å endre koden. Dette fremmer applikasjonsskalerbarhet.
En annen fordel er at dette mønsteret også er fleksibelt. Adaptermønsteret gir to implementeringsmetoder: objektadaptere og klasseadaptere.