Iterator
Iteratorul este un model de design comportamental. Reprezintă un obiect care permite accesul secvenţial la elementele unui obiect agregat fără a utiliza descrieri ale fiecăruia dintre obiectele agregate.
![Iterator](https://cdn.codegym.cc/images/article/87f809f8-e650-4b92-9d29-2624a2b1a64a/800.jpeg)
De exemplu, elemente precum un arbore, o listă legată, un tabel hash și o matrice pot fi parcurse (și modificate) folosind un obiect Iterator.
Iterarea prin elemente este făcută de obiectul iterator, nu de colecția în sine. Acest lucru simplifică interfața și implementarea colecției și promovează o separare mai logică a preocupărilor.
O caracteristică a unui iterator complet implementat este că codul care utilizează iteratorul poate să nu știe nimic despre tipul agregatului iterat.
Această abordare este folosită foarte des. De exemplu, trimiteți o interogare SQL la baza de date și, ca răspuns, vă returnează un iterator (în termeni SQL, se numește de obicei un cursor). Și cu ajutorul iteratorului rezultat, puteți lua rânduri din răspunsul SQL unul câte unul.
comanda
O comandă este un model de design comportamental utilizat în programarea orientată pe obiecte care reprezintă o acțiune. Obiectul de comandă conține acțiunea în sine și parametrii acesteia.
![Comanda](https://cdn.codegym.cc/images/article/d46ddf17-e840-4f4b-a505-092e666ec88f/800.jpeg)
Pentru a apela o metodă, de obicei aveți nevoie de:
- referință la obiect
- numele metodei (referința metodei)
- valorile parametrilor metodei
- referire la contextul care conține obiectele folosite
Toate aceste date trebuie să fie împachetate într-un singur obiect - Comanda ( comandă ).
Dar asta nu este tot: la urma urmei, cineva trebuie să execute comanda. Deci, acest model include încă patru entități: comenzi ( comandă ), un receptor de comandă ( receptor ), un apelant de comandă ( invoker ) și un client ( client ).
Un obiectcomandaștie despre receptor și apelează la metoda receptorului. Valorile parametrilor receptorului sunt stocate în comandă. Apelantul (invocatorul) știe cum să execute comanda și, eventual, ține evidența comenzilor executate. Apelantul (invocatorul) nu știe nimic despre o anumită comandă, știe doar despre interfață.
Ambele obiecte (obiectul care apelează și mai multe obiecte de comandă) aparțin obiectului client. Clientul decide ce comenzi să execute și când. Pentru a executa o comandă, acesta transmite obiectul de comandă apelantului (invocatorului).
Utilizarea obiectelor de comandă facilitează construirea componentelor partajate pe care trebuie să le delegați sau să efectuați apeluri de metodă în orice moment, fără a fi nevoie să cunoașteți metodele clasei sau parametrii metodei.
Utilizarea obiectului apelant (invoker) vă permite să păstrați o evidență a comenzilor executate fără a fi nevoie ca clientul să cunoască acest model de contabilitate (o astfel de contabilitate poate fi utilă, de exemplu, pentru implementarea comenzilor undo și redo).
De exemplu, scrieți un program care vă permite să efectuați diverse sarcini într-un program. Pe de o parte, programul tău ține evidența sarcinilor și gestionează lansarea acestora, pe de altă parte, poate avea mai mulți executori, fiecare dintre care poate executa comenzi de tipul său. De exemplu, trimiterea de SMS-uri, trimiterea de scrisori, trimiterea de mesaje către Telegram etc.
Observator
Observer este un model de design comportamental. Implementează un mecanism de clasă care permite unui obiect din această clasă să primească notificări despre modificările stării altor obiecte și astfel să le observe.
![Observator](https://cdn.codegym.cc/images/article/4ea53747-311e-48ea-a92c-f622b44ac328/800.jpeg)
Clasele la care sunt abonate alte clase se numesc Subiecte , iar clasele la care sunt abonate se numesc Observatori .
La implementarea modelului Observer, sunt utilizate în mod obișnuit următoarele clase:
- Observabil - o interfață care definește metode pentru adăugarea, eliminarea și notificarea observatorilor;
- Observator - interfața prin care observatorul primește notificarea;
- ConcreteObservable este o clasă concretă care implementează interfața Observable ;
- ConcreteObserver este o clasă concretă care implementează interfața Observer .
Modelul Observer este utilizat atunci când sistemul:
- există cel puțin un obiect care trimite mesaje;
- există cel puțin un destinatar de mesaje, iar numărul și compoziția acestora se pot schimba în timp ce aplicația rulează;
- evită cuplarea puternică a claselor care interacționează.
Acest tipar este adesea folosit în situațiile în care expeditorul mesajelor nu este interesat de ceea ce fac destinatarii cu informațiile care le sunt furnizate.
Vizitator
Vizitator este un model de design comportamental care descrie o operație care este efectuată pe obiecte din alte clase. Când vizitați sau schimbați, nu este nevoie să schimbați clasele deservite.
Șablonul demonstrează tehnica clasică de recuperare a informațiilor de tip pierdut fără a recurge la dubla dispecerare downcast.
![Vizitator](https://cdn.codegym.cc/images/article/012e3e42-6151-4ecf-b322-0642841bf923/800.jpeg)
Trebuie să faceți unele operații deconectate pe un număr de obiecte, dar trebuie să evitați poluarea codului acestora. Și nu există nicio modalitate sau dorință de a interoga tipul fiecărui nod și de a arunca indicatorul la tipul corect înainte de a efectua operația dorită.
Șablonul trebuie utilizat dacă:
- există diverse obiecte de clase diferite cu interfețe diferite, dar trebuie efectuate operațiuni asupra lor care depind de clase specifice;
- asupra structurii, este necesar să se efectueze diverse operații care complică structura;
- se adaugă adesea noi operații asupra structurii.
mediator
Mediatorul este un model de design comportamental care permite mai multor obiecte să interacționeze, menținând în același timp cuplarea liberă și evitând necesitatea ca obiectele să se refere în mod explicit unele la altele.
![Mediator](https://cdn.codegym.cc/images/article/17d10313-3412-461b-82f2-c007d664adb6/800.jpeg)
Modelul Mediator vă permite să asigurați interacțiunea mai multor obiecte, formând în același timp un cuplaj liber și eliminând nevoia ca obiectele să se refere în mod explicit unele la altele.
Mediatorul definește o interfață pentru schimbul de informații cu obiecteleColegi, Un anumit mediator coordonează acțiunile obiectelorColegi.
Fiecare clasă Coleg știe despre obiectul săuMediator, toți Colegii fac schimb de informații doar cu un intermediar, în lipsa acestuia ar trebui să facă schimb de informații direct.
Colegitrimiteți cereri către Reseller/span> și primiți solicitări de la acesta. Mediatorul implementează un comportament cooperant prin transmiterea fiecărei cereri către unul sau mai mulțiColegi.