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.
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:
offentliggrensesnittLade kort{
offentligtomrommånedlig saldo();
offentligtomromforsinkelses gebyr();
offentligtomromÅrsavgift();
}
En populær type betalingskort som denne organisasjonens system behandler er plommekortet:
offentligklassePlumCardredskaperLade kort{
privatint kortnr;
privat String kundenavn;
privatdobbelt balansere;// primær konstruktør
offentligPlumCard(int kortnr, streng kundenavn, dobbelt balansere){
dette.kortNr = kortnr;
dette.customerName = kundenavn;
dette.balanse = balanse;
}
// gettere og settere
offentligintfå kortnr(){
komme tilbake kortnr;
}
offentligtomromsetCardNo(int kortnr){
dette.kortNr = kortnr;
}
offentlig String getCustomerName(){
komme tilbake Kundenavn;
}
offentligtomromsetCustomerName(streng kundenavn){
dette.customerName = kundenavn;
}
offentligdobbeltgetBalance(){
komme tilbake balansere;
}
offentligtomromsettBalanse(dobbelt balansere){
dette.balanse = balanse;
}
@Overstyring
offentligtomrommånedlig saldo(){
System.out.println("I januar " + dette.customerName + "brukt" + dette.balansere);
}
@Overstyring
offentligtomromforsinkelses gebyr(){
System.out.println(dette.customerName + "Månedlig forsinkelsesavgift er $80,00");
}
@Overstyring
offentligtomromÅrsavgift(){
System.out.println(dette.customerName + "årsavgift er $200,00");
}
}
Denne finansinstitusjonen går over til kredittkort og fase ut betalingskortene, så noen av kundene deres har nå kredittkort:
offentliggrensesnittKredittkort{
offentligtomrommånedligMinbetaling();
offentligtomromrenter();
offentligtomromÅrsavgift();
}
Bedriftssystemet for finansinstitusjoner behandler nå kun 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.
offentligklasseChargeCardAdapterredskaperKredittkort{
ChargeCard chargeCard;offentligChargeCardAdapter(ChargeCard chargeCard){
dette.chargeCard = chargeCard;
}@Overstyring
offentligtomrommånedligMinbetaling(){
dette.chargeCard.monthlyBalance();
}@Overstyring
offentligtomromrenter(){
dette.chargeCard.lateFee();
}
@Overstyring
offentligtomromÅrsavgift(){
dette.lade kort. Årsavgift();
}
}
Denne ChargeCardAdapteren Java klasse implementerer kredittkortet Java-grensesnitt. Den tilpasser ChargeCard (tilpasseren), og gir den egenskapene til et kredittkort. Systemet vil for eksempel behandle rentegebyret til 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.