This shows you the differences between two versions of the page.
|
poo-ca-cd:laboratoare:design-patterns-part-two [2025/12/03 02:43] florian_luis.micu [Exerciții] |
poo-ca-cd:laboratoare:design-patterns-part-two [2025/12/03 02:54] (current) florian_luis.micu [Exemplu complet varianta simplă] |
||
|---|---|---|---|
| Line 20: | Line 20: | ||
| - | ======Builder====== | + | ======👷 Builder====== |
| **Builder** este un **creational design pattern** folosit când ai obiecte complexe, cu **multe câmpuri opționale** sau **pași de inițializare diferiți**. El separă construcția obiectului de reprezentarea lui, astfel încât același proces de construire poate genera obiecte diferite. | **Builder** este un **creational design pattern** folosit când ai obiecte complexe, cu **multe câmpuri opționale** sau **pași de inițializare diferiți**. El separă construcția obiectului de reprezentarea lui, astfel încât același proces de construire poate genera obiecte diferite. | ||
| Line 293: | Line 293: | ||
| =====Exemplu complet varianta simplă===== | =====Exemplu complet varianta simplă===== | ||
| - | Există o variantă mai simplă a acestui pattern care folosește o clasă internă și pe care o veți folosi mai des în proiectele voastre: | + | Există o variantă **mai simplă** a acestui pattern care folosește o clasă internă și pe care o veți folosi mai des în proiectele voastre: |
| <code java> | <code java> | ||
| Line 365: | Line 365: | ||
| <note tip> | <note tip> | ||
| - | Este **mult mai ușor să scrieți** și, mai important, **să citiți** acest cod. La fel ca în cazul constructorului, putem verifica parametrii trecuți pentru orice încălcare, cel mai adesea în cadrul metodei ''build()'' sau a metodei setter, și putem arunca ''IllegalStateException'' dacă există încălcări înainte de a crea o instanță a clasei. | + | * Este **mult mai ușor să scrieți** și, mai important, **să citiți** acest cod. La fel ca în cazul constructorului, putem verifica parametrii trecuți pentru orice încălcare, cel mai adesea în cadrul metodei ''build()'' sau a metodei setter, și putem arunca ''IllegalStateException'' dacă există încălcări înainte de a crea o instanță a clasei. |
| + | * Vă încurajăm să **folosiți această versiune a pattern-ului Builder** și să recurgeți la varianta mai complexă doar dacă aveți nevoie de mai mulți Builderi specifici. | ||
| </note> | </note> | ||
| Line 389: | Line 390: | ||
| </code> | </code> | ||
| </note> | </note> | ||
| - | ======Observer====== | + | ======👀 Observer====== |
| Observer este un **behavioral design pattern** folosit atunci când ai un obiect (denumit Subject) care trebuie să **notifice** automat alte obiecte (Observeri) atunci când starea sa internă se schimbă, practic definând o relație **1:N**. | Observer este un **behavioral design pattern** folosit atunci când ai un obiect (denumit Subject) care trebuie să **notifice** automat alte obiecte (Observeri) atunci când starea sa internă se schimbă, practic definând o relație **1:N**. | ||
| Line 582: | Line 583: | ||
| * În locul listei simple de observatori, în proiecte moderne se folosesc **API-uri reactive**: **java.util.concurrent.Flow** sau **RxJava** / **Project Reactor**, care permit **backpressure** și **stream-uri de evenimente mai complexe**. | * În locul listei simple de observatori, în proiecte moderne se folosesc **API-uri reactive**: **java.util.concurrent.Flow** sau **RxJava** / **Project Reactor**, care permit **backpressure** și **stream-uri de evenimente mai complexe**. | ||
| </note> | </note> | ||
| - | ======Strategy====== | + | ======🎲 Strategy====== |
| Strategy este un **behavioral design pattern** care permite definirea unei **familii de algoritmi**, fiind **încapsulați** și **interschimbabili**. Strategy permite schimbarea comportamentului unui obiect în timpul execuției fără a modifica codul clientului care îl folosește. | Strategy este un **behavioral design pattern** care permite definirea unei **familii de algoritmi**, fiind **încapsulați** și **interschimbabili**. Strategy permite schimbarea comportamentului unui obiect în timpul execuției fără a modifica codul clientului care îl folosește. | ||
| Line 756: | Line 757: | ||
| În aplicații **Spring** sau **Quarkus**, Strategy este folosit în **bean-uri**, pentru a schimba comportamentul fără a modifica clientul. | În aplicații **Spring** sau **Quarkus**, Strategy este folosit în **bean-uri**, pentru a schimba comportamentul fără a modifica clientul. | ||
| </note> | </note> | ||
| - | ======Command====== | + | ======🎮 Command====== |
| Command este un **behavioral design pattern** folosit pentru a **încapsula o solicitare** sau o **acțiune** ca un obiect. Acest pattern permite **parametrizarea** obiectelor cu diferite acțiuni, **stocarea** cererilor și **posibilitatea de a le executa mai târziu**, inclusiv să le **anulezi** sau să le **refaci**. | Command este un **behavioral design pattern** folosit pentru a **încapsula o solicitare** sau o **acțiune** ca un obiect. Acest pattern permite **parametrizarea** obiectelor cu diferite acțiuni, **stocarea** cererilor și **posibilitatea de a le executa mai târziu**, inclusiv să le **anulezi** sau să le **refaci**. | ||
| Line 987: | Line 988: | ||
| Pattern-ul Command este foarte folosit în aplicații enterprise moderne cu **RabbitMQ**, **Kafka** sau **task queues**, unde „comanda” devine un mesaj. | Pattern-ul Command este foarte folosit în aplicații enterprise moderne cu **RabbitMQ**, **Kafka** sau **task queues**, unde „comanda” devine un mesaj. | ||
| </note> | </note> | ||
| - | ======Tips & Tricks Design Patterns====== | + | ======🪄 Tips & Tricks Design Patterns====== |
| =====Comparare între Design Patterns===== | =====Comparare între Design Patterns===== | ||