S nárůstem architektury orientované na služby (SOA) stále více organizací využívá pro své podnikové systémy služby třetích stran. Tyto společnosti musí držet krok s rychle se měnícím podnikatelským prostředím, což může znamenat opuštění služeb jednoho poskytovatele služeb za jiného.
V takových případech může být stávající architektura podniku nekompatibilní s architekturou nového poskytovatele. Místo plýtvání měsíců přepisováním podnikového kódu, aby byl kompatibilní s novým softwarem, může podnik použít návrhový vzor adaptéru.
jak spouštět programy pro mac v systému windows
Jaký je návrhový vzor adaptéru?
Vzor adaptéru umožňuje, aby třídy, které mají nekompatibilní rozhraní, spolupracovaly. Dělá to převodem rozhraní existující třídy (nebo softwaru) na rozhraní, které klient (nebo služba) očekává. Existují dva typy adaptérů: objektové adaptéry a adaptéry třídy.
Objektový adaptér používá kompozici k zabalení adaptéru do adaptéru a efektivně vytváří rozhraní, které klient očekává. Pokud tedy klient očekává řetězec, adaptér vezme celé číslo (adaptovaný) a dá mu vlastnosti řetězce.
Výše uvedený diagram tříd představuje objektový adaptér. The třída adaptéru implementuje cílové rozhraní , efektivně získat přístup ke všem metodám rozhraní. Poté se přizpůsobí adaptant a zabalí to adaptant s cílové rozhraní metody.
Adaptér třídy používá vícenásobnou dědičnost, kde třída adaptéru je podtřídou jak adaptovaného, tak cílové třídy. Níže uvedený diagram tříd představuje adaptér třídy, který můžete volně používat v programovacích jazycích, které podporují vícenásobnou dědičnost.
Implementace návrhového vzoru adaptéru v Javě
Tato aplikace bude implementovat objektový adaptér. Tato ukázková aplikace bude simulovat finanční organizaci přecházející z používání a zpracování charge karet na kreditní karty. Tato organizace původně používala následující rozhraní platební karty:
co je dvojité mezery ve slově
public interface ChargeCard {
public void monthlyBalance();
public void lateFee();
public void Annualfee();
}
Oblíbeným typem platební karty, kterou systém této organizace zpracovává, je švestková karta:
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");
}
}
Tato finanční instituce přechází na kreditní karty a postupně vyřazuje platební karty, takže někteří z jejích zákazníků nyní mají kreditní karty:
public interface CreditCard {
public void monthlyMinPayment();
public void interest();
public void Annualfee();
}
Podnikový systém finančních institucí nyní zpracovává pouze kreditní karty, protože se v nadcházejícím roce chystá přestat používat charge karty. Většina jejich zákazníků ale stále používá charge karty. Inženýři se tedy rozhodli, že bude nejlepší implementovat adaptér, dokud všichni jejich zákazníci nepřejdou na kreditní kartu.
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();
}
}
Tento adaptér ChargeCard třída Java implementuje kreditní kartu rozhraní Java . Přizpůsobuje ChargeCard (přizpůsobený) a dává jí vlastnosti kreditní karty. Systém například zpracuje úrokový poplatek kreditní karty, což je poplatek z prodlení u zákazníka s charge kartou, který ještě neprovedl konverzi.
Výhody použití vzoru adaptéru
Hlavní výhodou použití vzoru adaptéru je, že umožňuje klientům používat nové služby, knihovny a funkce, aniž by měnili svůj kód. To podporuje škálovatelnost aplikací.
Další výhodou je, že tento vzor je také pružný. Vzor adaptéru poskytuje dvě metody implementace: objektové adaptéry a adaptéry tříd.