Uzorci dizajna: adapter. Strukturalni predlošci: Adapter Ready kod za adaptere u Javi
Adapter (uzorak dizajna)/primjeri koda- Glavni članak: Adapter (design pattern) Primjer implementacije uzorka u C# koristeći System; Adapter prostora imena ( class MainApp ( static void Main() ( ... Wikipedia
Proxy uzorak (uzorak dizajna)
Uzorak dizajna- Ovaj izraz ima i druga značenja, vidi obrazac. U razvoju softvera, uzorak dizajna je ponovljivi arhitektonski dizajn koji predstavlja rješenje problema... ... Wikipedia
Sučelje (uzorak dizajna)- Dizajn uzorak Sučelje Opisano u obrascima dizajna Ne U računalnoj znanosti, uzorak sučelja nije poseban uzorak među uzorcima dizajna. To je opća metoda za strukturiranje računalni programi za to... Wikipedia
Zamjenik (uzorak dizajna)- Proxy uzorak (zamjenik) uzorak dizajna. Pruža objekt za kontrolu pristupa, presrećući sve pozive prema njemu. Sadržaj 1 Cilj 1.1 Problem 1.2 Rješenje 2 Prednosti 3 ... Wikipedia
Čuvar (uzorak dizajna)- Uzorak dizajna Guardian Memento Vrsta: bihevioralni Opisano u uzorcima dizajna Da Guardian (također poznat kao Memento, Token, Token) je bihevioralni obrazac dizajna. Omogućuje popravak bez prekidanja enkapsulacije... Wikipedia
Iterator (uzorak dizajna)- Uzorak iteratora dizajna Tip iteratora: bihevioralni Opisano u obrascima dizajna Da Uzorak iteratora (također poznat kao pokazivač) Uzorak dizajna koji se odnosi na obrasce ponašanja. To je objekt koji vam omogućuje da dobijete ... Wikipedia
Tumač (uzorak dizajna)- Design pattern Interpreter Type: bihevioralni Svrha: rješava problem koji se često pojavljuje, sklon promjenama Opisano u Design Patterns Da Interpreter Pattern (engleski ... Wikipedia
Linker (uzorak dizajna)- Uzorak dizajna Kompozitni tip: strukturalni Opisano u uzorcima dizajna Da Kompozitni uzorak je uzorak dizajna, odnosi se na strukturne uzorke, kombinira objekt ... Wikipedia
Stanje (uzorak dizajna)- State design pattern Tip: bihevioralni Opisano u Design Patterns Da State je dizajn pattern. Koristi se u slučajevima kada se tijekom izvođenja programa objekt ... Wikipedia
Glavni članak: Adapter (uzorak dizajna) Primjer implementacije uzorka u C# pomoću sustava; Adapter prostora imena ( class MainApp ( static void Main() ( ... Wikipedia
Ovaj pojam ima i druga značenja, vidi obrazac. U razvoju softvera, uzorak dizajna je ponovljivi arhitektonski dizajn koji predstavlja rješenje problema... ... Wikipedia
Uzorak dizajna sučelja Sučelje opisano u obrascima dizajna Ne U informatici, uzorak sučelja nije poseban uzorak među uzorcima dizajna. To je opća metoda za strukturiranje računalnih programa kako bi se... Wikipedia
Uzorak dizajna proxy uzorka. Pruža objekt za kontrolu pristupa, presrećući sve pozive prema njemu. Sadržaj 1 Cilj 1.1 Problem 1.2 Rješenje 2 Prednosti 3 ... Wikipedia
Uzorak dizajna Guardian Memento Vrsta: bihevioralni Opisano u uzorcima dizajna Da Guardian (također poznat kao Memento, Token, Token) je bihevioralni obrazac dizajna. Omogućuje popravak bez prekidanja enkapsulacije... Wikipedia
Uzorak dizajna Iterator Vrsta iteratora: Bihevioralni Opisano u uzorcima dizajna Da Uzorak iteratora (također poznat kao kursor) Uzorak dizajna koji se odnosi na obrasce ponašanja. To je objekt koji vam omogućuje da dobijete ... Wikipedia
Design pattern Interpreter Type: bihevioralni Svrha: rješava problem koji se često pojavljuje, sklon promjenama Opisano u Design Patterns Da Interpreter pattern (engleski ... Wikipedia
Uzorak dizajna Kompozitni tip: strukturalni Opisano u uzorcima dizajna Da Kompozitni uzorak je uzorak dizajna, odnosi se na strukturalne uzorke, kombinira objekt ... Wikipedia
Tip stanja uzorka dizajna: bihevioralni Opisano u uzorcima dizajna Da Stanje je obrazac dizajna. Koristi se u slučajevima kada se tijekom izvođenja programa objekt ... Wikipedia
Prije čitanja pregledajte sljedeće konvencije i koncepte. Ovaj se članak često ažurira, pa ako ste ga već pročitali, nije činjenica da se podaci nisu promijenili.
Adapter pripadaju klasi strukturalni uzorci. Koristi se za pretvaranje jednog sučelja u drugo koje zahtijeva klijent. Adapter osigurava kompatibilnost nekompatibilnih sučelja implementacijom sloja.
Princip rada
Adapter nasljeđuje ciljno sučelje na otvoren način (nazovimo ga Cilj), i zatvoreno prilagodljivo sučelje ( Prilagodnik). U implementaciji metoda ciljnog sučelja zahtjevi se preusmjeravaju (delegiraju) u klasu s prilagodljivim sučeljem
Primjer
// Target sučelje, klijent može raditi samo s njim sučelje iTarget ( public function query(); ) // Prilagodljivo sučelje. Klijent ne zna kako raditi s njim, ali stvarno želi sučelje iAdaptee ( public function request(); ) // Klasa koja implementira prilagodljivu klasu sučelja Adaptee implementira iAdaptee ( public function request() ( return __CLASS__ . ":: " . __METHOD__; ) ) klasa Adapter implementira iTarget ( protected $adaptee = null; javna funkcija __construct() ( $this -> adaptee = new Adaptee(); ) javna funkcija query() ( return $this -> adaptee -> request (); ) ) $ Cilj = novi adapter(); print $Target -> query(); // "Adaptee::request"Zaključak
Adapter može prilagoditi nekoliko sučelja u jedno odjednom; ovaj obrazac se zove objektni adapter Korištenje ovog uzorka opravdano je u nekoliko slučajeva. Ako želite koristiti postojeću klasu s drugačijim sučeljem. Ako ćete koristiti prilagodljivo sučelje na nekoliko mjesta, a nemate priliku da svugdje izgleda isto, tada bi korištenje zamjenjivih adaptera moglo biti dobra ideja.
Svrha obrasca adaptera
Često u novom softverski projekt Nije moguće ponovno upotrijebiti postojeći kôd. Na primjer, postojeće klase mogu imati željenu funkcionalnost, ali imati nekompatibilna sučelja. U takvim slučajevima trebali biste koristiti uzorak adaptera.
Uzorak adaptera, koji je softverski omotač nad postojećim klasama, pretvara njihova sučelja u oblik prikladan za kasniju upotrebu.
Pogledajmo jednostavan primjer kada treba koristiti obrazac adaptera. Razvijmo sustav kontrole klime dizajniran za automatsko održavanje temperature okoline unutar zadanih granica. Važna komponenta Takav sustav je senzor temperature, s kojim se mjeri temperatura okoline za naknadnu analizu. Za ovaj senzor već postoji gotov softver od programera trećih strana, što je klasa s odgovarajućim sučeljem. Međutim, ovu klasu ne možete koristiti izravno jer se očitanja senzora uzimaju u stupnjevima Fahrenheita. Potreban vam je adapter koji pretvara temperaturu u Celzijeve stupnjeve.
Spremnici queue, priority_queue i stack standardne biblioteke STL predložaka implementirani su na temelju sekvencijalnih popisa, deque i vektorskih spremnika, prilagođavajući svoja sučelja željenom obliku. Zato se ovi spremnici nazivaju adapterski spremnici.
Opis uzorka adaptera
Neka se klasa čije sučelje treba prilagoditi željenom obliku nazove Adaptee. Kako bi riješio problem transformacije svog sučelja, obrazac Adapter uvodi sljedeću hijerarhiju klasa:
- Ciljana virtualna osnovna klasa. Najavljeno ovdje korisničko sučelje prikladan tip. Korisniku je dostupno samo ovo sučelje.
- Izvedena klasa adaptera koja implementira Target sučelje. Ova klasa također sadrži pokazivač ili referencu na Adaptee instancu. Uzorak Adapter koristi ovaj pokazivač za prosljeđivanje poziva klijenta Adaptee-u. Budući da su sučelja Adaptee i Target međusobno nekompatibilna, ovi pozivi obično zahtijevaju konverziju.
Implementacija obrasca adaptera
Klasična implementacija uzorka adaptera
Ovdje je implementacija uzorka adaptera. Za gornji primjer prilagođavamo očitanja senzora temperature sustava kontrole klime, pretvarajući ih iz stupnjeva Fahrenheita u stupnjeve Celzijusa (pretpostavlja se da kod za ovaj senzor nije dostupan za modifikaciju).
#uključi
Implementacija obrasca adaptera na temelju zatvorenog nasljeđivanja
Neka naš senzor temperature sustava kontrole klime podrži funkciju podešavanja za točnija očitanja. Ova se funkcija ne mora koristiti, što je vjerojatno razlog zašto su programeri proglasili zaštićenom odgovarajuću metodu adjust() u postojećoj klasi FahrenheitSensor.
Sustav koji razvijamo mora podržavati prilagodbu mjerenja. Budući da je pristup zaštićenoj metodi putem pokazivača ili veze zabranjen, klasična implementacija obrasca Adapter ovdje više nije prikladna. Jedino rješenje je naslijediti od klase FahrenheitSensor. Sučelje ove klase mora ostati nedostupno korisniku, stoga nasljeđivanje mora biti privatno.
Ciljevi kojima se teži pri korištenju otvorenog i zatvorenog nasljeđivanja su različiti. Dok se otvoreno nasljeđivanje koristi za sučelje i nasljeđivanje implementacije, zatvoreno nasljeđivanje koristi se samo za nasljeđivanje implementacije.
#uključi
Rezultati primjene obrasca adaptera
Prednosti uzorka adaptera
- Uzorak adaptera omogućuje vam ponovnu upotrebu postojećeg koda prilagođavanjem njegovog nekompatibilnog sučelja u upotrebljiv oblik.
Nedostaci obrasca adaptera
- Zadatak pretvaranja sučelja može biti težak ako klijentski pozivi i/ili proslijeđeni parametri nemaju funkcionalnu korespondenciju u objektu koji se prilagođava.
Bok svima! Danas ćemo razgovarati o Uzorak dizajna adaptera uzorka. Kao što naziv implicira, služi da osigura nešto prilagoditi, ali što? A ovaj članak će vam odgovoriti na ovo pitanje.
Opis uzorka dizajna adaptera
Odmaknimo se malo od programiranja i pogledajmo adapteri U stvarnom životu. Na primjer, kupili ste neku opremu (na primjer, računalo) u inozemstvu. Došavši kući s njim, otkrili ste da se utikač drugog standarda ne uklapa u našu rusku utičnicu. Što uraditi? Pravo! Morate otići u trgovinu i kupiti adapter, pomoću kojeg možete povezati svoje računalo s mrežom. Dakle ovaj adapter i postoji adapter. U njega umetnemo strani utikač, a sam adapter uključimo u mrežu i sve radi odlično. Oni. služi jednostavno sloj između naše utičnice i stranog utikača.
Pa mislim da si shvatio što je adapter u životu. U programiranju je isto.
Primjer implementacije adaptera u PHP-u
sučelje iMain (javna funkcija send();
}
Sučelje iAdaptee (
upit javne funkcije();
}
Class Adaptee implementira iAdaptee (
upit javne funkcije() (
return __CLASS__."::".__METHOD__;
}
}
Class Adapter implementira iMain (
zaštićeno $adaptee = null;
Javna funkcija __construct() (
$this->adaptee = new Adaptee();
}
Javna funkcija send() (
return $this->adaptee->inquiry();
}
}
$goal = novi adapter();
echo $goal->send(); // "Adaptee::upit"
?>
Evo našeg koda. Hajdemo shvatiti. Imamo sučelje iMain, kod klijenta može raditi s njim. Zatim imamo sučelje iAdaptee, s kojim kod klijenta ne može raditi, ali moramo na neki način komunicirati s njim. Onda imamo nastavu Prilagodnik iAdaptee a unutar sebe ima metodu tzv upit, koji jednostavno vraća niz poput RAZRED::METODA. Evo dolazimo do razreda Adapter, koji nasljeđuje sučelje iMain. Unutar njega stvaramo zaštićenu imovinu prilagođenik, jednako ništavan. Zatim, u konstruktoru kreiramo objekt klase Prilagodnik i upiši ga u našu zaštićenu imovinu. U metodi poslati vraćamo poziv metode upit.
To je sve. Sada stvaramo naš objekt adaptera i pozivamo metodu poslati.
Oni. cijela poanta je u tome da možemo raditi s jednim sučeljem, ali ne možemo s drugim, a kako bismo na neki način komunicirali s tim nama nedostupnim sučeljem, stvaramo adapter, sloj kroz koji provodimo svoj zadatak.
Zaključak
Sada vam se možda čini da je sve jako komplicirano i teško, ali nije tako. Mislim da razumijete značenje adaptera, ali sada vam treba više prakse. Ponovno pogledajte kôd dan u ovom članku i pokušajte ga shvatiti. Prođite kroz njega red po red i recitirajte ga kao da ste tumač php. Također, savjetujem vam da pogledate kod nekog okvira, jer se ovaj predložak tamo dosta često koristi.
Ovime završavamo ovaj prilično dugačak članak, hvala na pažnji!