Čitatelji poput vas podržavaju MUO. Kada kupite putem poveznica na našoj stranici, možemo zaraditi partnersku proviziju. Čitaj više.

S porastom uslužno orijentirane arhitekture (SOA), sve više organizacija koristi usluge trećih strana za svoje poslovne sustave. Te tvrtke moraju ići u korak s poslovnim okruženjem koje se brzo mijenja, što može značiti napuštanje usluga jednog pružatelja usluga drugom.

U takvim slučajevima postojeća arhitektura tvrtke može biti nekompatibilna s arhitekturom novog pružatelja usluga. Umjesto gubljenja mjeseci na prepisivanje poslovnog koda kako bi bio kompatibilan s novim softverom, tvrtka može koristiti obrazac dizajna adaptera.

Što je uzorak dizajna adaptera?

Uzorak adaptera omogućuje klasama koje imaju nekompatibilna sučelja da rade zajedno. To čini pretvaranjem sučelja postojeće klase (ili softvera) u ono koje klijent (ili usluga) očekuje. Postoje dvije vrste adaptera: adaptori objekta i adapteri klase.

Objektni adapter koristi kompoziciju za omotavanje prilagođenog s adaptorom, učinkovito proizvodeći sučelje koje klijent očekuje. Dakle, ako klijent očekuje niz, adapter će uzeti cijeli broj (prilagodnik) i dati mu karakteristike niza.

instagram viewer

Gornji dijagram klasa predstavlja adapter objekta. The klasa adaptera provodi ciljno sučelje, učinkovito dobivanje pristupa svim metodama sučelja. Zatim se prilagođava prilagođenik i omota to prilagođenik s ciljno sučelje metode.

Adapter klase koristi višestruko nasljeđivanje, gdje je klasa adaptora podklasa i adaptirane i ciljne klase. Donji dijagram klasa predstavlja adapter klase, koji možete slobodno koristiti u programskim jezicima koji podržavaju višestruko nasljeđivanje.

Implementacija uzorka dizajna adaptera u Javi

Ova aplikacija će implementirati adapter objekta. Ovaj primjer aplikacije će simulirati financijsku organizaciju koja prelazi s upotrebe i obrade kartica za plaćanje na kreditne kartice. Ova je organizacija izvorno koristila sljedeće sučelje kartice za naplatu:

javnostsučeljePlatna kartica{
javnostponištitimjesečno stanje();
javnostponištitilateFee();
javnostponištitiGodišnja naknada();
}

Popularna vrsta kartice za plaćanje koju sustav ove organizacije obrađuje je plum kartica:

javnostrazredaPlumCardoruđaPlatna kartica{
privatnaint br. kartice;
privatna String customerName;
privatnadvostruko ravnoteža;

// primarni konstruktor
javnostPlumCard(int cardNo, String customerName, dvostruko ravnoteža){
ovaj.karticaNo = karticaBroj;
ovaj.customerName = customerName;
ovaj.balance = ravnoteža;
}

// primatelji i postavljači
javnostintgetCardNo(){
povratak br. kartice;
}

javnostponištitisetCardNo(int kartica br){
ovaj.karticaNo = karticaBroj;
}

javnost Niz getCustomerName(){
povratak Ime kupca;
}

javnostponištitisetCustomerName(String customerName){
ovaj.customerName = customerName;
}

javnostdvostrukogetBalance(){
povratak ravnoteža;
}

javnostponištitisetBalance(dvostruko ravnoteža){
ovaj.balance = ravnoteža;
}

@Nadjačaj
javnostponištitimjesečno stanje(){
System.out.println("U siječnju " + ovaj.customerName + "potrošeno" + ovaj.ravnoteža);
}

@Nadjačaj
javnostponištitilateFee(){
System.out.println(ovaj.customerName + "mjesečna naknada za zakašnjenje iznosi 80,00 USD");
}

@Nadjačaj
javnostponištitiGodišnja naknada(){
System.out.println(ovaj.customerName + "godišnja naknada je 200,00 USD");
}
}

Ova financijska institucija prelazi na kreditne kartice i postupno ukida kartice za naplatu, tako da neki od njihovih klijenata sada imaju kreditne kartice:

javnostsučeljeKreditna kartica{
javnostponištitimjesečno Min. plaćanje();
javnostponištitiinteres();
javnostponištitiGodišnja naknada();
}

Poslovni sustav financijskih institucija sada obrađuje samo kreditne kartice, budući da namjerava prekinuti korištenje kartica za naplatu u nadolazećoj godini. Ali većina njihovih kupaca i dalje koristi kartice za naplatu. Stoga su inženjeri odlučili da je najbolje implementirati adapter dok svi njihovi korisnici ne pređu na kreditnu karticu.

javnostrazredaAdapter kartice za punjenjeoruđaKreditna kartica{
ChargeCard chargeCard;

javnostAdapter kartice za punjenje(ChargeCard chargeCard){
ovaj.chargeCard = ChargeCard;
}

@Nadjačaj
javnostponištitimjesečno Min. plaćanje(){
ovaj.chargeCard.monthlyBalance();
}

@Nadjačaj
javnostponištitiinteres(){
ovaj.chargeCard.lateFee();
}

@Nadjačaj
javnostponištitiGodišnja naknada(){
ovaj.platna kartica. Godišnja naknada();
}
}

Ovaj ChargeCardAdapter Java klasa implementira CreditCard Java sučelje. Prilagođava ChargeCard (prilagodnik), dajući mu karakteristike kreditne kartice. Na primjer, sustav će obraditi kamatu na kreditnu karticu, što je zakašnjela naknada korisnika kartice koja još nije izvršila konverziju.

Prednosti korištenja obrasca adaptera

Glavna prednost korištenja uzorka adaptera je ta što klijentima omogućuje korištenje novih usluga, biblioteka i značajki bez mijenjanja koda. Ovo promiče skalabilnost aplikacije.

Još jedna prednost je što je ovaj uzorak također fleksibilan. Uzorak adaptera pruža dvije metode implementacije: adaptore objekata i adaptore klasa.