Läsare som du hjälper till att stödja MUO. När du gör ett köp med hjälp av länkar på vår webbplats kan vi tjäna en affiliate-provision. Läs mer.

Med framväxten av tjänsteorienterad arkitektur (SOA) använder fler och fler organisationer tredjepartstjänster för sina företagssystem. Dessa företag måste hänga med i en snabbt föränderlig affärsmiljö, vilket kan innebära att de överger tjänsterna från en tjänsteleverantör för en annan.

I sådana fall kan ett företags befintliga arkitektur vara inkompatibel med en ny leverantörs. Istället för att slösa månader på att skriva om företagskoden för att göra den kompatibel med ny programvara, kan ett företag använda adapterns designmönster.

Vad är adapterns designmönster?

Adaptermönstret tillåter klasser som har inkompatibla gränssnitt att arbeta tillsammans. Den gör detta genom att konvertera gränssnittet för en befintlig klass (eller programvara) till ett som en klient (eller tjänst) förväntar sig. Det finns två typer av adaptrar: objektadaptrar och klassadaptrar.

instagram viewer

Objektadaptern använder komposition för att linda in adaptern med adaptern, vilket effektivt producerar det gränssnitt som klienten förväntar sig. Så om klienten förväntar sig en sträng kommer adaptern att ta ett heltal (den adapterade) och ge den egenskaperna hos en sträng.

Klassdiagrammet ovan representerar objektadaptern. De adapter klass implementerar målgränssnitt, som effektivt får tillgång till alla gränssnittets metoder. Sedan anpassar den en anpassad och slår in det anpassad med målgränssnitt metoder.

Klassadaptern använder multipelt arv, där adapterklassen är underklassen till både adaptern och målklassen. Klassdiagrammet nedan representerar klassadaptern, som du är fri att använda i programmeringsspråk som stöder multipla arv.

Implementering av adapterdesignmönstret i Java

Denna applikation kommer att implementera objektadaptern. Denna exempelapplikation kommer att simulera en finansiell organisation som övergår från användning och bearbetning av betalkort till kreditkort. Denna organisation använde ursprungligen följande betalkortsgränssnitt:

offentliggränssnittLadda kort{
offentligtomhetmånadssaldo();
offentligtomhetförseningsavgift();
offentligtomhetÅrlig avgift();
}

En populär typ av betalkort som denna organisations system bearbetar är plommonkortet:

offentligklassPlumCardredskapLadda kort{
privatint kort nr;
privat Sträng kundnamn;
privatdubbel balans;

// primär konstruktör
offentligPlumCard(int kortnr, sträng kundnamn, dubbel balans){
detta.cardNo = cardNo;
detta.customerName = kundnamn;
detta.balans = balans;
}

// getters och setters
offentligintgetCardNo(){
lämna tillbaka kort nr;
}

offentligtomhetsetCardNo(int kort nr){
detta.cardNo = cardNo;
}

offentlig Sträng getCustomerName(){
lämna tillbaka Köparens namn;
}

offentligtomhetsetCustomerName(Sträng kundnamn){
detta.customerName = kundnamn;
}

offentligdubbelgetBalance(){
lämna tillbaka balans;
}

offentligtomhetsetBalance(dubbel balans){
detta.balans = balans;
}

@Åsidosätta
offentligtomhetmånadssaldo(){
System.out.println("I januari " + detta.customerName + "tillbringade" + detta.balans);
}

@Åsidosätta
offentligtomhetförseningsavgift(){
System.out.println(detta.customerName + "Månatlig förseningsavgift är $80,00");
}

@Åsidosätta
offentligtomhetÅrlig avgift(){
System.out.println(detta.customerName + "årsavgift är $200.00");
}
}

Denna finansiella institution går över till kreditkort och fasar ut betalkorten, så några av deras kunder har nu kreditkort:

offentliggränssnittKreditkort{
offentligtomhetmånatligMinBetalning();
offentligtomhetintressera();
offentligtomhetÅrlig avgift();
}

Finansinstitutets företagssystem behandlar nu bara kreditkort, eftersom det planerar att sluta använda betalkort under det kommande året. Men de flesta av deras kunder använder fortfarande betalkort. Så ingenjörerna beslutade att det var bäst att implementera en adapter tills alla deras kunder övergick till ett kreditkort.

offentligklassChargeCardAdapterredskapKreditkort{
ChargeCard chargeCard;

offentligChargeCardAdapter(ChargeCard chargeCard){
detta.chargeCard = chargeCard;
}

@Åsidosätta
offentligtomhetmånatligMinBetalning(){
detta.chargeCard.monthlyBalance();
}

@Åsidosätta
offentligtomhetintressera(){
detta.chargeCard.lateFee();
}

@Åsidosätta
offentligtomhetÅrlig avgift(){
detta.ladda kort. Årlig avgift();
}
}

Denna ChargeCardAdapter Java klass implementerar kreditkortet Java-gränssnitt. Den anpassar ChargeCard (den anpassade), vilket ger det egenskaperna hos ett kreditkort. Till exempel kommer systemet att behandla ränteavgiften för ett kreditkort, vilket är förseningsavgiften för en betalkortskund som inte har konverterat ännu.

Fördelar med att använda adaptermönstret

Den stora fördelen med att använda adaptermönstret är att det tillåter kunder att använda nya tjänster, bibliotek och funktioner utan att ändra sin kod. Detta främjar applikationens skalbarhet.

En annan fördel är att detta mönster också är flexibelt. Adaptermönstret tillhandahåller två implementeringsmetoder: objektadaptrar och klassadaptrar.