Med fremkomsten af serviceorienteret arkitektur (SOA) bruger flere og flere organisationer tredjepartstjenester til deres virksomhedssystemer. Disse virksomheder skal følge med i et hurtigt skiftende forretningsmiljø, hvilket kan betyde, at de opgiver en tjenesteudbyders tjenester for en anden.
I sådanne tilfælde kan en virksomheds eksisterende arkitektur være uforenelig med en ny udbyders. I stedet for at spilde måneder på at omskrive virksomhedskode for at gøre den kompatibel med ny software, kan en virksomhed bruge adapterdesignmønsteret.
Hvad er adapterdesignmønsteret?
Adaptermønsteret tillader klasser, der har inkompatible grænseflader, at arbejde sammen. Det gør det ved at konvertere grænsefladen for en eksisterende klasse (eller software) til en, som en klient (eller service) forventer. Der er to typer adaptere: objektadaptere og klasseadaptere.
Objektadapteren bruger sammensætning til at pakke den tilpassede med adapteren, hvilket effektivt producerer den grænseflade, som klienten forventer. Så hvis klienten forventer en streng, vil adapteren tage et heltal (den tilpassede) og give den karakteristika af en streng.
Klassediagrammet ovenfor repræsenterer objektadapteren. Det adapter klasse gennemfører målgrænseflade, der effektivt får adgang til alle grænsefladens metoder. Så tilpasser den en tilpasset og pakker det ind tilpasset med målgrænseflade metoder.
Klasseadapteren bruger multipel nedarvning, hvor adapterklassen er underklassen af både den tilpassede og målklassen. Klassediagrammet nedenfor repræsenterer klasseadapteren, som du frit kan bruge i programmeringssprog, der understøtter multipel nedarvning.
Implementering af adapterdesignmønsteret i Java
Denne applikation implementerer objektadapteren. Denne eksempelapplikation vil simulere en finansiel organisation, der går fra brug og behandling af betalingskort til kreditkort. Denne organisation brugte oprindeligt følgende betalingskortgrænseflade:
offentliginterfaceChargeCard{
offentligugyldigmånedsbalance();
offentligugyldigsent gebyr();
offentligugyldigÅrligt gebyr();
}
En populær type betalingskort, som denne organisations system behandler, er blommekortet:
offentligklassePlumCardredskaberChargeCard{
privatint kort nej;
privat Streng kundenavn;
privatdobbelt balance;// primær konstruktør
offentligPlumCard(int kortnr, streng kundenavn, dobbelt balance){
det her.cardNo = cardNo;
det her.kundenavn = kundenavn;
det her.balance = balance;
}
// gettere og sættere
offentligintfå kortnr(){
Vend tilbage kort nej;
}
offentligugyldigsætKortnr(int kort nej){
det her.cardNo = cardNo;
}
offentlig Snor få Kundenavn(){
Vend tilbage Kundenavn;
}
offentligugyldigsæt Kundenavn(streng kundenavn){
det her.kundenavn = kundenavn;
}
offentligdobbeltfåBalance(){
Vend tilbage balance;
}
offentligugyldigsætBalance(dobbelt balance){
det her.balance = balance;
}
@Tilsidesæt
offentligugyldigmånedsbalance(){
System.out.println("I januar " + det her.customerName + "brugt" + det her.balance);
}
@Tilsidesæt
offentligugyldigsent gebyr(){
System.out.println(det her.customerName + "Månedligt forsinkelsesgebyr er $80,00");
}
@Tilsidesæt
offentligugyldigÅrligt gebyr(){
System.out.println(det her.customerName + "årligt gebyr er $200,00");
}
}
Denne finansielle institution går over til kreditkort og udfaser betalingskortene, så nogle af deres kunder har nu kreditkort:
offentliginterfaceKreditkort{
offentligugyldigmånedligMinbetaling();
offentligugyldiginteresse();
offentligugyldigÅrligt gebyr();
}
Det finansielle institutions virksomhedssystem behandler nu kun kreditkort, da det ser ud til at stoppe brugen af betalingskort i det kommende år. Men de fleste af deres kunder bruger stadig betalingskort. Så ingeniørerne besluttede, at det var bedst at implementere en adapter, indtil alle deres kunder gik over til et kreditkort.
offentligklasseChargeCardAdapterredskaberKreditkort{
ChargeCard chargeCard;offentligChargeCardAdapter(ChargeCard chargeCard){
det her.chargeCard = chargeCard;
}@Tilsidesæt
offentligugyldigmånedligMinbetaling(){
det her.chargeCard.monthlyBalance();
}@Tilsidesæt
offentligugyldiginteresse(){
det her.chargeCard.lateFee();
}
@Tilsidesæt
offentligugyldigÅrligt gebyr(){
det her.chargeCard. Årligt gebyr();
}
}
Denne ChargeCardAdapter Java klasse implementerer Kreditkortet Java-grænseflade. Det tilpasser ChargeCard (den tilpassede), hvilket giver det karakteristika af et kreditkort. Systemet vil f.eks. behandle rentegebyret på et kreditkort, som er forsinkelsesgebyret for en betalingskortkunde, der endnu ikke har konverteret.
Fordele ved at bruge adaptermønsteret
Den største fordel ved at bruge adaptermønsteret er, at det giver kunderne mulighed for at bruge nye tjenester, biblioteker og funktioner uden at ændre deres kode. Dette fremmer applikationens skalerbarhed.
En anden fordel er, at dette mønster også er fleksibelt. Adaptermønstret giver to implementeringsmetoder: objektadaptere og klasseadaptere.