Dizajnerski uzorci: Adapter. Strukturni predlošci: Adapter Ready kod za adaptere u Javi
Adapter (uzorak dizajna)/Primjeri koda- Glavni članak: Adapter (uzorak dizajna) Primjer implementacije šablona u C# koristeći System; Adapter prostora imena ( klasa MainApp ( static void Main() ( ... Wikipedia
Proxy uzorak (uzorak dizajna)
Design Pattern- Ovaj izraz ima druga značenja, pogledajte Uzorak. U razvoju softvera, obrazac dizajna je ponovljivi arhitektonski dizajn koji predstavlja rješenje problema... ... Wikipedia
Interfejs (uzorak dizajna)- Dizajn dizajna Interfejs Opisano u obrascima dizajna Ne U računarskoj nauci, obrazac interfejsa nije poseban obrazac među obrascima dizajna. To je opći metod za strukturiranje kompjuterski programi za to... Wikipedia
Zamjenik (obrazac dizajna)- Proxy uzorak (zamjenik) Dizajn uzorak. 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)- Design Pattern Guardian Memento Tip: Behavioral opisan u dizajnerskim obrascima Da Guardian (također poznat kao Memento, Token, Token) je obrazac ponašanja. Omogućava vam da popravite bez prekida enkapsulacije... Wikipedia
Iterator (uzorak dizajna)- Dizajn iteratora Tip iteratora: bihejvioralni Opisan u obrascima dizajna Da Uzorak iteratora (također poznat kao kursor) Dizajnerski obrazac koji se odnosi na obrasce ponašanja. To je objekat koji vam omogućava da dobijete ... Wikipedia
Prevoditelj (uzorak dizajna)- Dizajn obrazac Interpreter Type: bihevioralni Svrha: rješava problem koji se često javlja, sklon promjenama. Opisan u Design Patterns Da Uzorak tumača (engleski ... Wikipedia
Linker (uzorak dizajna)- Oblik dizajna Kompozitni tip: strukturni Opisan u obrascima dizajna Da Kompozitni uzorak je obrazac dizajna, odnosi se na strukturalne obrasce, kombinuje objekt... Wikipedia
Država (uzorak dizajna)- Tip šablona dizajna stanja: bihevioralni Opisano u obrascima dizajna Da Stanje je obrazac dizajna. Koristi se u slučajevima kada se tokom izvršavanja programa objekt ... Wikipedia
Glavni članak: Adapter (uzorak dizajna) Primjer implementacije obrasca u C# koristeći System; Adapter prostora imena ( klasa MainApp ( static void Main() ( ... Wikipedia
Ovaj izraz ima druga značenja, pogledajte Obrazac. U razvoju softvera, obrazac dizajna je ponovljivi arhitektonski dizajn koji predstavlja rješenje problema... ... Wikipedia
Obrazac dizajna interfejsa Interfejs opisan u obrascima dizajna Ne U računarskoj nauci, obrazac interfejsa nije poseban obrazac među obrascima dizajna. To je opći metod za strukturiranje kompjuterskih programa kako bi se... Wikipedia
Proxy Pattern Design pattern. 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
Design Pattern Guardian Memento Tip: Behavioral Opisan u obrascima dizajna Da Guardian (također poznat kao Memento, Token, Token) je obrazac ponašanja. Omogućava vam da popravite bez prekida enkapsulacije... Wikipedia
Obrazac dizajna Iterator Tip iteratora: Behaviorski Opisan u obrascima dizajna Da Uzorak iteratora (također poznat kao kursor) Dizajnerski obrazac koji se odnosi na obrasce ponašanja. To je objekat koji vam omogućava da dobijete ... Wikipedia
Dizajn obrazac Interpreter Tip: bihevioralni Svrha: rješava problem koji se često javlja, sklon promjenama Opisano u Dizajnerskim obrascima Da Obrasca tumača (engleski ... Wikipedia
Dizajn obrazac Kompozitni tip: strukturni Opisan u obrascima dizajna Da Kompozitni uzorak je obrazac dizajna, odnosi se na strukturalne obrasce, kombinuje objekat ... Wikipedia
Tip stanja obrasca dizajna: bihevioralno Opisano u obrascima dizajna Da Stanje je obrazac dizajna. Koristi se u slučajevima kada se tokom izvršavanja programa objekt ... Wikipedia
Prije čitanja, molimo pregledajte sljedeće konvencije i koncepte. Ovaj članak se s određenom učestalošću ažurira, pa ako ste ga već čitali, nije činjenica da se podaci nisu promijenili.
Adapter pripadaju klasi strukturalni uzorci. Koristi se za pretvaranje jednog interfejsa u drugi koji zahteva klijent. Adapter osigurava kompatibilnost nekompatibilnih interfejsa implementacijom sloja.
Princip rada
Adapter nasljeđuje ciljni interfejs na otvoren način (nazovimo ga Target), i zatvoren način prilagodljiv interfejs ( Adaptee). U implementaciji metoda ciljnog interfejsa, zahtjevi se preusmjeravaju (delegiraju) na klasu s prilagodljivim sučeljem
Primjer
// Ciljno 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__; ) ) adapter klase implementira iTarget (zaštićeno $adaptee = null; javna funkcija __construct() ( $this -> adaptee = new Adaptee(); ) javna funkcija query() (vrati $this -> adaptee -> zahtjev (); ) ) $ Target = novi adapter(); print $Target -> query(); // "Prilagođeni::zahtjev"Zaključak
Adapter može prilagoditi nekoliko interfejsa u jedan odjednom; ovaj obrazac se zove objektni adapter Upotreba ovog obrasca opravdana je u nekoliko slučajeva. Ako želite da koristite postojeću klasu sa drugačijim interfejsom. Ako ćete koristiti prilagodljivo sučelje na nekoliko mjesta, a nemate priliku da svugdje izgledate isto, onda bi korištenje zamjenjivih adaptera moglo biti dobra ideja.
Svrha uzorka adaptera
Često u novom softverski projekat Ne može ponovo koristiti postojeći kod. Na primjer, postojeće klase mogu imati željenu funkcionalnost, ali imaju nekompatibilna sučelja. U takvim slučajevima, trebali biste koristiti obrazac Adapter.
Adapter obrazac, koji je softverski omotač preko postojećih klasa, pretvara njihova sučelja u oblik pogodan za kasniju upotrebu.
Pogledajmo jednostavan primjer kada treba koristiti Adapter obrazac. Hajde da razvijemo sistem kontrole klime dizajniran da automatski održava temperaturu okoline u određenim granicama. Važna komponenta Takav sistem je temperaturni senzor, kojim se mjeri temperatura okoline za naknadnu analizu. Za ovaj senzor već postoji gotov softver od programera trećih strana, što je klasa sa odgovarajućim interfejsom. Međutim, ne možete direktno koristiti ovu klasu, jer se očitanja senzora uzimaju u stepenima Farenhajta. Potreban vam je adapter koji pretvara temperaturu u Celzijuse.
Kontejneri queue, priority_queue i stek standardne biblioteke STL šablona implementirani su na osnovu sekvencijalne liste, deque i vektorskih kontejnera, prilagođavajući svoje interfejse željenom obliku. Zbog toga se ovi kontejneri nazivaju adapterski kontejneri.
Opis obrasca adaptera
Neka se klasa čiji interfejs treba prilagoditi željenom obliku nazove Adaptee. Da bi riješio problem transformacije svog sučelja, obrazac Adapter uvodi sljedeću hijerarhiju klasa:
- Ciljna virtuelna bazna klasa. Najavljeno ovdje korisnički interfejs pogodan tip. Samo ovaj interfejs je dostupan korisniku.
- Izvedena klasa Adaptera koja implementira Target interfejs. Ova klasa također sadrži pokazivač ili referencu na Adaptee instancu. Adapter obrazac koristi ovaj pokazivač za prosljeđivanje klijentskih poziva Adaptee-u. Budući da su Adaptee i Target interfejsi međusobno nekompatibilni, ovi pozivi obično zahtijevaju konverziju.
Implementacija obrasca adaptera
Klasična implementacija Adapter šablona
Ovdje je implementacija obrasca adaptera. Za gornji primjer prilagođavamo očitanja temperaturnog senzora sistema za kontrolu klime, pretvarajući ih iz stupnjeva Farenhajta u stupnjeve Celzijusa (pretpostavlja se da kod za ovaj senzor nije dostupan za modifikaciju).
#include
Implementacija obrasca adaptera zasnovanog na zatvorenom nasljeđivanju
Neka naš senzor temperature klima uređaja podržava funkciju podešavanja za preciznija očitavanja. Ovu funkciju nije potrebno koristiti, što je vjerovatno razlog zašto je odgovarajuća metoda adapt() deklarirana zaštićenom od strane programera u postojećoj klasi FahrenheitSensor.
Sistem koji razvijamo mora podržavati prilagođavanje mjerenja. Pošto je pristup zaštićenoj metodi preko pokazivača ili veze zabranjen, klasična implementacija obrasca adaptera ovde više nije prikladna. Jedino rješenje je naslijediti klasu FahrenheitSensor. Interfejs ove klase mora ostati nedostupan korisniku, tako da nasljeđivanje mora biti privatno.
Ciljevi kojima se teži korištenjem otvorenog i zatvorenog nasljeđivanja su različiti. Dok se otvoreno nasljeđivanje koristi za nasljeđivanje interfejsa i implementacije, zatvoreno nasljeđivanje se koristi samo za nasljeđivanje implementacije.
#include
Rezultati primjene obrasca adaptera
Prednosti šablona adaptera
- Adapter obrazac vam omogućava da ponovo koristite postojeći kod prilagođavanjem njegovog nekompatibilnog interfejsa u upotrebljiv oblik.
Nedostaci modela 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.
Zdravo svima! Danas ćemo pričati o Pattern Adapter dizajn uzorak. Kao što naziv govori, služi da se nešto osigura prilagoditi, ali šta? I ovaj članak će vam odgovoriti na ovo pitanje.
Opis obrasca dizajna adaptera
Odmaknimo se malo od programiranja i pogledajmo adapteri u stvarnom životu. Na primjer, kupili ste neku opremu (na primjer, računar) u inostranstvu. Stigavši kući s njim, otkrili ste da se utikač drugog standarda ne uklapa u našu rusku utičnicu. sta da radim? Tačno! Morate otići u prodavnicu i kupiti adapter, pomoću koje možete povezati svoj računar na mrežu. Dakle, ovaj adapter i postoji adapter. U njega ubacimo strani utikač, a sam adapter utaknemo u mrežu i sve radi odlično. One. služi jednostavno sloj između naše utičnice i stranog utikača.
Tako da mislim da ste shvatili šta je adapter u životu. U programiranju je isto.
Primjer implementacije adaptera u PHP-u
interfejs iMain (javna funkcija send();
}
Interfejs 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 = novi Adaptee();
}
Javna funkcija send() (
vrati $this->adaptee->inquiry();
}
}
$goal = novi adapter();
echo $goal->send(); // "Prilagođeni::upit"
?>
Evo našeg koda. Hajde da to shvatimo. Imamo interfejs iMain, klijentski kod može raditi s njim. Zatim imamo interfejs iAdaptee, s kojim klijentski kod ne može raditi, ali mi moramo nekako komunicirati s njim. Onda imamo čas Adaptee iAdaptee a unutar njega ima metod tzv upit, koji jednostavno vraća niz poput KLASA::METOD. Evo nas na času Adapter, koji nasljeđuje interfejs iMain. Unutar njega stvaramo zaštićeno dobro adaptee, jednako null. Zatim, u konstruktoru kreiramo objekat klase Adaptee i zapišite ga u našu zaštićenu imovinu. U metodi poslati vraćamo poziv metode upit.
To je sve. Sada kreiramo naš objekat adaptera i pozivamo metodu poslati.
One. cijela poenta je u tome da možemo raditi sa jednim interfejsom, ali ne možemo sa drugim, i da bismo nekako stupili u interakciju sa ovim nama nedostupnim interfejsom, kreiramo adapter, sloj kroz koji implementiramo naš zadatak.
Zaključak
Sada vam se možda čini da je sve vrlo komplikovano i teško, ali nije tako. Mislim da razumijete značenje adaptera, ali sada vam treba više vježbe. Pogledajte ponovo kod dat u ovom članku i pokušajte ga shvatiti. Prođite kroz nju red po red i recitujte kao da ste prevodilac php. Također, savjetujem vam da pogledate kod nekog frameworka, jer se ovaj šablon tamo dosta često koristi.
Ovim je završen ovaj prilično dug članak, hvala na pažnji!