2.1 Stat
Statul este un model de design comportamental. Se folosește în acele cazuri când, în timpul execuției programului, obiectul trebuie să își schimbe comportamentul în funcție de starea sa.
![Stat](https://cdn.codegym.cc/images/article/0b64173f-b514-4ae1-a073-6cbb386a5716/800.jpeg)
Modelul este format din 3 blocuri:
Contextul este o clasă ale cărei obiecte ar trebui să-și schimbe comportamentul în funcție de stare.
Statul este interfața pe care fiecare dintre stările concrete trebuie să o implementeze. Prin această interfață, obiectul Context interacționează cu starea delegându-i apelurile de metodă. Interfața ar trebui să conțină mijloace de feedback către obiectul al cărui comportament urmează să fie schimbat.
Pentru aceasta se folosește un eveniment (pattern Editor - Abonat). Acest lucru este necesar pentru a înlocui obiectul de stare în timpul execuției programului atunci când apar evenimente. Pot exista cazuri în care Contextul însuși sondajează periodic obiectul de stat pentru o tranziție.
ConcreteState1, ConcreteState2 - clase de stări concrete. Ar trebui să conțină informații despre în ce condiții și în ce stări poate trece obiectul din starea curentă. De exemplu, din ConcreteState1, un obiect poate merge la ConcreteState2 și ConcreteState3, iar de la ConcreteState2 înapoi la ConcreteState1 și așa mai departe. Obiectul unuia dintre ele trebuie să conțină Contextul atunci când este creat.
De exemplu, scrieți un joc în care un personaj poate alerga, înota și zbura. Dacă personajul tău a intrat în apă, atunci este rezonabil să-și limitezi comportamentul în apă: acum nu poate trage, dar mai are câteva acțiuni: înot înainte, dreapta, stânga etc.
Starea personajului tău poate fi descrisă de un obiect State, care are metode care pot fi apelate și care vor face ceva. Și după ce personajul tău a intrat în apă, schimbi doar referința la un alt obiect de stat din interiorul său - și acesta își schimbă starea.
2.2 strategie
Strategia este un model de design comportamental pentru definirea unei familii de algoritmi, încapsulându-i pe fiecare și făcându-i interschimbabili. Acest lucru vă permite să alegeți un algoritm prin definirea clasei corespunzătoare.
Modelul de strategie vă permite să schimbați algoritmul selectat indiferent de obiectele client care îl folosesc.
![Strategie](https://cdn.codegym.cc/images/article/673c4c44-ec33-4d4e-860f-399abc388d8d/800.jpeg)
Modelul de strategie vă permite să utilizați diferite reguli de afaceri sau algoritmi în funcție de context. Este folosit în cazurile în care trebuie folosiți algoritmi diferiți în același loc în funcție de starea curentă a sistemului (sau a mediului său).
Puncte forte:
- încapsularea implementării diverșilor algoritmi, sistemul devine independent de posibilele modificări ale regulilor de afaceri;
- apelarea tuturor algoritmilor într-un mod standard;
- nefolosind comutatoare și/sau instrucțiuni condiționale.
Acest model este oarecum asemănător cu modelul de stat, dar aici accentul nu este pus pe stare, ci pe comportament. Să presupunem că un personaj din jocul tău poate schimba armele. Apoi, atunci când schimbați armele, puteți schimba pur și simplu referința la obiectul care descrie cum funcționează această armă.
2.3 Metoda șablonului
![Metoda șablonului](https://cdn.codegym.cc/images/article/be4df3de-e667-4f4d-9ea7-d3b021879bb2/800.jpeg)
Clasa abstracta (clasa abstracta) - defineste operatiunile abstracte care sunt inlocuite in mostenitori pentru a implementa etapele algoritmului; implementează o metodă șablon care definește scheletul algoritmului. Metoda șablon apelează operațiile înlocuite și alte operațiuni definite în clasa Abstract.
Clasa de beton (clasa de beton) - implementeaza operatiile inlocuite in modul necesar implementarii. Clasa Concrete presupune că pașii invarianți ai algoritmului vor fi executați în AbstractClass.
Acest model este adesea folosit atunci când este necesar:
- Utilizarea unică a părții invariante a algoritmului, lăsând partea care se schimbă la latitudinea moștenitorilor.
- Localizarea și izolarea codului comun mai multor clase pentru a evita duplicarea.
- Permiteți moștenitorilor să extindă codul numai în anumite locuri.
Da, acest model descrie utilizarea unei perechi: o clasă abstractă și implementarea acesteia.
2.4 Lanțul de responsabilitate
Lanțul de responsabilitate este un model de design comportamental conceput pentru a organiza nivelurile de responsabilitate într-un sistem.
![Lanț de responsabilitate](https://cdn.codegym.cc/images/article/41b55822-dc67-4db3-a0e8-b467bc9f320d/800.jpeg)
Șablonul este recomandat pentru utilizare în condițiile în care:
- în sistemul dezvoltat există un grup de obiecte care pot procesa mesaje de un anumit tip;
- toate mesajele trebuie să fie procesate de cel puțin un obiect de sistem;
- mesajele din sistem sunt procesate conform schemei „procesează-l singur sau transmite-l altuia”, adică unele mesaje sunt procesate la nivelul la care au fost primite, în timp ce altele sunt redirecționate către obiecte de alt nivel.
2.5 Memento
Keeper (Memento) este un model de design comportamental care vă permite să remediați și să salvați starea internă a unui obiect fără a încălca încapsularea, astfel încât să poată fi restabilit ulterior în această stare.
![Gardian (Memento)](https://cdn.codegym.cc/images/article/9b1d2d68-74b7-427c-8d7b-cf44640cf51f/800.jpeg)
Modelul Guardian este folosit atunci când:
- este necesar să salvați un instantaneu al stării obiectului (sau a unei părți a acestuia) pentru restaurarea ulterioară;
- Interfața directă pentru obținerea stării unui obiect expune detaliile implementării și întrerupe încapsularea obiectului.
GO TO FULL VERSION