Hvad er adapterdesignmønsteret, og hvordan kan du bruge det?

Hvad er adapterdesignmønsteret, og hvordan kan du bruge det?
Læsere som dig hjælper med at støtte MUO. Når du foretager et køb ved hjælp af links på vores websted, kan vi optjene en affiliate-kommission. Læs mere.

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.

 Objektadapter

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.

 Klasse adapter

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.