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:
public interface ChargeCard {
public void monthlyBalance();
public void lateFee();
public void Annualfee();
}
En populær type betalingskort, som denne organisations system behandler, er blommekortet:
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 finansielle institution går over til kreditkort og udfaser betalingskortene, så nogle af deres kunder har nu kreditkort:
public interface CreditCard {
public void monthlyMinPayment();
public void interest();
public void Annualfee();
}
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.
hvordan man reducerer størrelsen på jpeg
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 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.