Z vzponom storitveno usmerjene arhitekture (SOA) vse več organizacij uporablja storitve tretjih oseb za svoje poslovne sisteme. Ta podjetja morajo biti v koraku s hitro spreminjajočim se poslovnim okoljem, kar lahko pomeni opustitev storitev enega ponudnika storitev za drugega.
V takšnih primerih je lahko obstoječa arhitektura podjetja nezdružljiva z arhitekturo novega ponudnika. Namesto da bi zapravljali mesece s prepisovanjem poslovne kode, da bi bila združljiva z novo programsko opremo, lahko podjetje uporabi vzorec načrtovanja adapterja.
Kaj je vzorec načrtovanja adapterja?
Vzorec adapterja omogoča, da razredi, ki imajo nezdružljive vmesnike, delujejo skupaj. To naredi s pretvorbo vmesnika obstoječega razreda (ali programske opreme) v tistega, ki ga odjemalec (ali storitev) pričakuje. Obstajata dve vrsti adapterjev: vmesniki objektov in vmesniki razreda.
Objektni adapter uporablja kompozicijo za ovijanje prilagojenega z adapterjem, kar učinkovito ustvari vmesnik, ki ga pričakuje odjemalec. Torej, če odjemalec pričakuje niz, bo adapter vzel celo število (adaptee) in mu dal značilnosti niza.
Zgornji diagram razredov predstavlja adapter objekta. The razred adapterja izvaja ciljni vmesnik, ki učinkovito pridobijo dostop do vseh metod vmesnika. Nato se prilagodi prilagojenec in to zavije prilagojenec z ciljni vmesnik metode.
Adapter razreda uporablja večkratno dedovanje, kjer je razred adapterja podrazred tako prilagojenega kot ciljnega razreda. Spodnji diagram razredov predstavlja adapter razreda, ki ga lahko prosto uporabljate v programskih jezikih, ki podpirajo večkratno dedovanje.
Implementacija vzorca načrtovanja adapterja v Javi
Ta aplikacija bo implementirala objektni adapter. Ta vzorčna aplikacija bo simulirala finančno organizacijo, ki prehaja z uporabe in obdelave plačilnih kartic na kreditne kartice. Ta organizacija je prvotno uporabljala naslednji vmesnik plačilne kartice:
javnostivmesnikChargeCard{
javnostiprazninamonthlyBalance();
javnostiprazninalateFee();
javnostiprazninaLetna pristojbina();
}
Priljubljena vrsta bremenilne kartice, ki jo sistem te organizacije obdeluje, je kartica s slivo:
javnostirazredPlumCardpripomočkeChargeCard{
zasebnoint št. kartice;
zasebno String customerName;
zasebnodvojno ravnovesje;// primarni konstruktor
javnostiPlumCard(int cardNo, String customerName, dvojno ravnovesje){
to.cardNo = kartica;
to.customerName = customerName;
to.balance = bilanca;
}
// pridobivalci in nastavljalci
javnostiintgetCardNo(){
vrnitev št. kartice;
}
javnostiprazninasetCardNo(int kartica št){
to.cardNo = kartica;
}
javnosti Vrvica getCustomerName(){
vrnitev Ime stranke;
}
javnostiprazninasetCustomerName(Niz customerName){
to.customerName = customerName;
}
javnostidvojnogetBalance(){
vrnitev ravnovesje;
}
javnostiprazninasetBalance(dvojno ravnovesje){
to.balance = bilanca;
}
@Preglasi
javnostiprazninamonthlyBalance(){
System.out.println("Januarja " + to.customerName + "porabljen" + to.ravnovesje);
}
@Preglasi
javnostiprazninalateFee(){
System.out.println(to.customerName + "mesečna zamuda je 80,00 $");
}
@Preglasi
javnostiprazninaLetna pristojbina(){
System.out.println(to.customerName + "letna pristojbina je 200,00 $");
}
}
Ta finančna institucija prehaja na kreditne kartice in postopoma opušča plačilne kartice, tako da imajo nekatere njihove stranke zdaj kreditne kartice:
javnostivmesnikKreditna kartica{
javnostiprazninamesečno Min.plačilo();
javnostiprazninaobresti();
javnostiprazninaLetna pristojbina();
}
Poslovni sistem finančnih institucij zdaj obdeluje samo kreditne kartice, saj namerava v prihodnjem letu opustiti uporabo plačilnih kartic. Toda večina njihovih strank še vedno uporablja plačilne kartice. Zato so se inženirji odločili, da je najbolje uporabiti adapter, dokler vse njihove stranke ne preidejo na kreditno kartico.
javnostirazredChargeCardAdapterpripomočkeKreditna kartica{
ChargeCard chargeCard;javnostiChargeCardAdapter(ChargeCard chargeCard){
to.chargeCard = ChargeCard;
}@Preglasi
javnostiprazninamesečno Min.plačilo(){
to.chargeCard.monthlyBalance();
}@Preglasi
javnostiprazninaobresti(){
to.chargeCard.lateFee();
}
@Preglasi
javnostiprazninaLetna pristojbina(){
to.chargeCard. Letna pristojbina();
}
}
Ta ChargeCardAdapter Java razred implementira CreditCard Java vmesnik. Prilagodi ChargeCard (adaptee), ki ji daje lastnosti kreditne kartice. Sistem bo na primer obdelal provizijo za obresti kreditne kartice, ki je zamudna provizija stranke s plačilno kartico, ki še ni opravila konverzije.
Prednosti uporabe vzorca adapterja
Glavna prednost uporabe vzorca adapterja je, da odjemalcem omogoča uporabo novih storitev, knjižnic in funkcij brez spreminjanja kode. To spodbuja razširljivost aplikacije.
Druga prednost je, da je ta vzorec tudi prilagodljiv. Vzorec adapterja zagotavlja dve implementacijski metodi: adapterje objektov in adapterje razredov.