Sunteți pe pagina 1din 6

(cr)Abstract Factory Ofera o interfata pentru crearea unor familii de obiecte inrudite sau dependente intre ele, fara

a specifica clasa lor concreta.Se utilizeaza cind : un sistem trebuie sa fie independent de modul in care produsele sale sunt create, compuse si reprezentate; un sistem trebuie sa fie configurat la un moment dat cu una din mai multe familii de produse; trebuie fortata restrictia ca produsele dintr-o anumita familie sa fie utilizate impreuna si nu amestecate cu produsele altei familii; se doreste crearea unei biblioteci de produse pentru care sunt relevante doar interfetele, nu si implementarile. ablonul abstract factory asigur o modalitate de grupare a mai multor metode factory ce au elemente comune. Conform acestui ablon se creeaz o clas abstract factory ce va sta la baza mai multor clase concrete factory. Clasele factory conin cte o metod factory pentru fiecare tip de obiect ce trebuie creat.Codul client lucreaz doar cu tipul abstract de factory, nedepinznd de tipurile concrete. Conform acestui ablon, sunt create obiect concrete, dar codul client le acceseaz doar prin interfaa lor abstract.Adugarea de noi tipuri concrete sistemului se face prin modificarea codului client, n aa fel nct s foloseasc o nou clas concret factory. (cr)Builder Scopul este de a separa constructia unui obiect complex de reprezentarea, infatisarea sa, astfel incat acelasi proces de construire poate crea diferite reprezentari. Se utilizeaza cind : algoritmul pentru crearea unui obiect complex ar trebui sa fie independent de partile componente ale obiectului si de cum sunt acestea asamblate ; procesul construirii trebuie sa permita diferite reprezentari pentru obiectul ce se construieste. Clientul creaza obiectul Director si il configureaza cu obiectul Builder dorit. Directorul anunta Builder-ul de fiecare data cand o parte a produsului ar trebui construita; Builder-ul se ocupa de cererile de la Director si adauga parti produsului; Clientul primeste produsul de la Builder. Obiectele de obinut nu fac parte dintr-o anumit ierarhie de clase, dar exist constrngerea ca valorile atributelor acestora s nu aib sens dect ntr-o anumit combinaie. Fiecare combinaie de valori ale atributelor se obine cu un anumit builder (cu o anumit reet de fabricaie). Aceti builder -i sunt organizai ntr-o ierarhie de clase. (cr)Factory Method Acest sablon defineste o interfata pentru crearea unui obiect, dar lasa subclasele sa decida ce clasa trebuie instantiata. Practic, presupune ca o clasa paseaza subclaselor sale sarcina instantierii. Se utilizeaza cind: o clasa nu poate anticipa clasa obiectelor pe care trebuie sa le creeze; o clasa doreste ca subclasele sale sa specifice ce obiecte trebuie sa creeze; Sablonul Factory Method pune in legatura un obiect independent de aplicatie cu unul dependent de aplicatie care va fi delegat sa creeze alte obiecte dependente de aplicatie. Clasa Creator este independenta de clasele ProdusConcret care se vor crea intr-o aplicatie particulara, ea lucrand doar cu interfata Produs. Crearea obiectelor prin intermediul unei metode de generare este un procedeu mai flexibil decat crearea directa. Aplicarea sablonului FactoryMethod permite realizarea unei conexiuni intre ierarhii paralele de clase. Termenul factory este utilizat n acest context pentru a arta locul destina t construirii de obiecte. ablonul metod factory presupune crearea unei clase de baz (Creator) ce conine o metod destinat crerii obiectelor de un anumit tip.

(cr)Prototype Specifica tipul de obiecte de creat folosind o instanta prototip si creaza obiecte noi copiind acest prototip. Acest model este utilizat: pentru evitarea subclaselor unui obiect creator din aplicatia client, cum face modelul abstract factory ; evitarea mostenirii costului crearii unui obiect nou in modul standard cand e foarte scump pentru o aplicatie data. Se defineste o metoda clone() intr-o ierarhie existenta: interfata in clasa de baza si implementarea in clasele derivate. Fiecare implementare din clasele derivate incapsuleaza folosirea operatorului new si returneaza o instanta a lui insusi. Clientul delega un obiect prototip de fiecare data cand o instanta a ierarhiei e necesara. (cr)Singleton este un ablon folosit pentru a restriciona instanierea unei clase la un singur obiect. Acest concept este uneori generalizat pentru a restriciona instanierea la un anumit numr de obiecte. Singleton este singura clas care poate crea o instan a sa. Singura modalitate de creare este prin apelarea metodei statice oferit de ea. Referina nu trebuie transmis tuturor obiectelor interesate. Fiecare obiect ce are nevoie de Singleton va apela metoda static. ablonul singleton se implementeaz prin crearea unei singure clase ce conine o asociere reflexiv (unul din propriile atribute este tot de tipul clasei). Elementul cheie al acestui ablon este faptul c atributul ce are chia r tipul clasei este de tip static. n cazul unui atribut static, ca n exemplul ablonului singleton, se aloc memorie o singur dat, la prima initializare a clasei. La urmatoarele instanieri ale clasei nu se mai aloc memorie pentru un atribut static, dar toate obiectele din acea clas pot accesa aceeai variabil static, aflat n aceeai zon de memorie. Pe lng cele specificate mai sus, o clas singleton mai poate conine atribute i operaii specifice domeniului n care este utilizat. (st)Adapter Adaptorul este o clas ce permite traducerea unor interfee n alte interfee. Adaptorul permite unor clase cu interfee incompatibile s interacioneze. Acest ablon este folositor atunci cnd o clas deja implementat (clasa de adaptat sau clasa furnizor) asigur funcionalitile dorite, dar nu i interfaa dorit. Adaptorul tie s rspund cel puin la interfaa dorit de client, din acest motiv clasa adaptor este utilizat n mod direct de ctre clasa client. n acelai timp adaptorul tie s utilizeze funcionalitile clasei de adaptat. n acest fel, clasa client este independent de structura interfeei de adaptat. Cu un astfel de ablon clasa client poate modifica furnizorii de funcionaliti fr s i modifice propria structur, doar utiliznd ali adaptori. (st)Bridge Decupleaza o abstractie de pe implementare astfel incat cele doua sa varieze independent. Motivatie : Cand o abstractie poate avea una din mai multe posibile implementari , modul normal de acomodare este de a folosi mostenirea. Folosirea mostenirii vine totusi cu doua dezavantaje. a. Nu este convenabil sa extindem abstractia Window pentru a acoperi mai multe tipuri de ferestre sau platforme. b. Face codul clientului dependent de platforma. (st)Composite Realizeaza compunerea obiectelor intr-o structura de arbore, pentru a reprezenta ierarhii de tipul 'intreg-parti componente'. Da clientilor posibilitatea de a trata in mod uniform atat obiectele individuale, cat si structurile compuse de obiecte. Se utilizeaza cind: se doreste reprezentarea unor ierarhii de obiecte de tipul 'intregelement component' ; se urmareste sa se dea clientilor posibilitatea de a trata uniform obiectele individuale si agregatele de obiecte. Astfel, permite ca un client sa trateze uniform obiectele Leaf si Composite, fara a avea nevoie sa stie exact cu ce obiect concret lucreaza la un moment dat; da posibilitatea ca adaugarea unor noi clase Leaf sau Composite sa nu afecteze clasele client;

(st)Decorator Reprezinta o alternativa mai flexibila fata de derivarea claselor in scopul extinderii functionalitatii. Acest sablon permite atasarea in mod dinamic de functiuni aditionale unui obiect. Se utilizeaza : pentru a adauga functiuni in mod dinamic si transparent unor obiecte individuale; -pentru a putea elimina anumite functionalitati; -cand extinderea functionalitatii prin mostenire nu este posibila. Uneori avem de a face cu un numar mare de extensii independente intre ele, ceea ce ar duce la necesitatea crearii unui numar imens de subclase, ca sa se acopere toate combinatiile posibile. Decoratorii permit adaugarea/eliminarea de functiuni in timpul executiei, pur si simplu prin asocierea/disocierea obiectelor cu rol de decoratori la/de obiectele cu rol de componente infasurate. Daca s-ar aplica mostenirea, ar trebui sa se defineasca subclase pentru fiecare functie noua. (st)Faade O faad este un obiect ce asigur o interfa simplificat spre un grup de clase. Cu ajutorul acestui ablon o bibliotec software devine mai uor de neles i de utilizat, reducndui dependena de restul codului (scade cuplarea). O faad este recomandat i atunci cnd trebuie s folosim o colecie de clase ce folosesc interfee prost proiectate sau greu de neles, n sperana c interfaa faadei va rezolva aceste probleme. (st)Flyweight Reduce costul de creare si manipulare a unui numar mare de obiecte similare. Foloseste sharing pentru a sustine un numar mare de obiecte eficient. Motivatie : un flyweight reprezinta un obiect impartit ce poate fi folosit in contexte multiple simultan. Se comporta ca un obiect independent in fiecare context , nu se distinge dintr-o stare a obiectului daca nu este impartit. Flyweight se foloseste atunci cand: o aplicatie foloseste un numar mare de obiecte; - Costul stocarii este mai mare din cauza cantitatii mari de obiecte; - Multe grupuri de obiecte pot fi inlocuite de cateva obiecte impartite odata ce starea preparata este eliminata ; Aplicatia nu depinde de identitatea obiectului. (st)Proxy La modul general un proxy este o resurs (clas, server..) care funcioneaz ca o interfa pentru altceva. Un proxy nu face dect s delege aciunile mai departe unei alte clase. Motivatie : un motiv pentru a avea controlul asupra unui obiect este sa amane costul total al creatiei pana cand avem neaparat nevoie de el. Aceste constrangeri sugera sa cream fiecare care obiect scump doar la comanda.Solutia este sa folosim alt obiect , in cazul de fata o imagine proxy. Aplicabilitate proxy este folosit atunci cand este nevoie de o referinta mai diversificata sau sofisticata a unui obiect: - Un proxy la distanta ofera o reprezentare locala a unui obiect aflat in alt spatiu de adresa. - Un proxy virtual creaza obiecte scumpe la comanda. - Un proxy pentru protectie controleaza accesul la obiectul original. (com)Mediator De obicei o aplicaie este alctuit dintr-un numr important de clase. Cu ct sunt mai multe clase ntr-o aplicaie, problema comunicrii ntre obiecte devine mai complex, ceea ce face programul mai greu de citit i ntreinut. Modificarea programelor, n astfel de situaii, devine mai dificil din moment ce orice modificare poate afecta codul din mai multe clase. Cu ajutorul ablonului mediator comunicaia dintre obiecte este ncapsulat n obiectul mediator. Obiectele nu mai comunic direct ntre ele, ci comunic n schimb prin intermediul mediatorului. Acest lucru reduce dependena ntre obiecte, micornd cuplarea. Mediator - definete interfaa de comunicare ntre obiecte. ConcreteMediator - implementeaz interfaa Mediator i coordoneaz comunicarea ntre objecte. ConcreteColleague comunic cu alte obiecte colegi cu ajutorul mediatorului.

(com)Observer ablonul observator este un ablon de proiectare n care un obiect gestioneaz o list cu proprii dependeni, pe care i anun automat de eventualele modificri de stare, de obicei prin apelarea anumitor metode. De multe ori acest ablon este folosit pentru implementarea sistemelor distribuite. ablonul observator este un ablon de proiectare n care un obiect gestioneaz o list cu proprii dependeni, pe care i anun automat de eventualele modificri de stare, de obicei prin apelarea anumitor metode. De multe ori acest ablon este folosit pentru implementarea sistemelor distribuite. ablonul observator este utilizat atunci cnd modificarea strii unui obiect afecteaz alte obiecte i nu se tie la momentul scrierii codului exact ce obiecte vor trebui anunate. n terminologia acestui ablon toate obiectele de pe un formular sunt observatori, iar subiectul concret de observat este chiar formularul. Fiecare obiect n parte nu trebuie s modifice direct celelalte obiecte de pe formular pentru c ar trebui s cunoasc mulimea acestora. Aceeai funcionalitate a modurilor de lucru ar putrea fi implementat i cu ajutorul ablonului mediator. (com)Chain of responsibility ablonul lanului de responsabiliti (chain of responsibility) este un ablon comportamental care permite evitarea cuplrii directe a expeditorului unei cereri cu un anumit destinatar, folosindu-se n acest sens clase intermediare. Avantajele unui astfel de ablon: - expeditorul poate s nu cunoasc exact care este destinatarul final al cererii sale, pe el interesndu-l doar ca respectiva sarcin s fie ndeplinit; - clasele intermediare pot alege destinatarii, gestionnd eventual i gradul de solicitare al acestora i gradul de solicitare a sistemelor de calcul pe care ruleaz acetia; - o cerere poate fi procesat de mai muli destinatari, n acelai timp, secvenial sau respectnd chiar anumite fluxuri de cereri; - clasele intermediare pot realiza log-uri ale cererilor; - lipsa oricrui potential destinatar poate fi aflat de ctre expeditor printr-un mesaj primit de la clasele intermediare. (com)Template Method Sablonul defineste scheletul algoritmului dintr-o operatie, lasand ca anumiti pasi sa fie (re)definiti in subclase. Se utilizeaza :-pentru a implementa partile invariante ale unui algoritm o singura data, lasand subclaselor sarcina de a implementa partile care variaza; -cand partile comune ale unor subclase trebuie "scoase in factor comun" si localizate intr-o singura clasa, pentru a evita duplicarea de cod; acesta este un exemplu de "reproiectare in vederea generalizarii": mai intai se identifica diferentele din codul existent si apoi se constituie operatii noi cu diferentele respective, iar in final, codul se inlocuieste cu o metoda sablon care apeleaza una dintre operatiile noi; -pentru a controla extinderea subclaselor, si anume: se poate defini o metoda sablon care apeleaza asa-numite operatii-hook ("carlige") in puncte specifice, permitand astfel ca extensiile sa se realizeze doar in acele puncte. Metodele sablon reprezinta o tehnica fundamentala de reutilizare a codului. Ele au o importanta deosebita in cadrul bibliotecilor de clase, deoarece constituie un mijloc de factorizare a aspectelor comune ale comportamentului claselor respective. Metodele sablon reprezinta o structura de control inversat. Aceasta inseamna ca o clasa parinte apeleaza operatiile unei subclase si nu invers. (com)Iterator Reprezinta un mecanism de accesare a elementelor unui agregat de obiecte fara a expune reprezentarea interna a agregatului. Se utilizeaza pentru : -a accesa elementele unui agregat, fara a se cunoste reprezentarea interna a acestuia; -a permite traversari multiple simultane ale aceluiasi agregat; -a crea o interfata uniforma in vederea traversarii diferitelor structuri de agregate (cu alte cuvinte, pentru a crea suportul iterarii polimorfice).Sablonul Iterator ofera posibilitatea de a modifica tipul de traversare a unui agregat. Exista agregate care pot fi traversate in mai multe feluri. De exemplu, intr-un compilator, analiza semantica si generarea de cod se fac in timpul traversarii arborelui sintactic. Acesta poate fi parcurs in inordine sau in preordine. Pentru a schimba tipul parcurgerii doar se inlocuieste iteratorul.

(com)Strategy Presupune incapsularea separata a fiecarui algoritm dintr-o familie, facand astfel ca algoritmii respectivi sa fie interschimbabili. Se utilizeaza cind: -mai multe clase inrudite difera doar prin comportament; -sunt necesare mai multe variante ale unui algoritm, care difera intre ele, de exemplu, prin compromisul spatiu-timp adoptat; -un algoritm utilizeaza date pe care clientul algoritmului nu trebuie sa le cunoasca; -intr-o clasa sunt definite mai multe actiuni care apar ca structuri conditionale multiple. In loc de aceasta, se recomanda plasarea ramurilor conditionale inrudite in cate o clasa strategy separata. Ierarhiile de clase Strategy definesc familii de algoritmi sau comportamente care pot fi reutilizate in diverse contexte. Mostenirea poate fi aplicata aici pentru a "factoriza" functionalitatile comune ale algoritmilor. Sablonul Strategy ofera o alternativa structurilor de control conditionale pentru selectia unui anumit comportament. Cand mai multi algoritmi sunt inglobati intr-o singura clasa, este greu sa se evite structurile conditionale. Adesea, prezenta in cod a numeroase asemenea structuri constituie un indiciu ca ar trebui aplicat sablonul Strategy. Clasele Strategy se pot utiliza si in cazul producerii de implementari diferite ale aceluiasi comportament, clientul putand sa opteze pentru una dintre ele, in functie de performantele dorite. (com) Memento ablonul amintire (memento) este un ablon comportamental destinat salvrii diferitelor stri curente ale unor obiecte i revenirea la aceste stri. n acest ablon se folosete o clas de amintire (Memento) ce conine aceleai proprieti de stare ca i clasa obiectelor de salvat (Originator). Obiectele de amintire se pot gestiona eventual ntr-o colecie (Caretaker). Obiectul de salvat trebuie s conin cte o metod pentru fiecare din aceste dou aciuni: salvare (createMemento) i revenire la stare anterioar (setMemento). (com) State Modelul State permite unui obiect sa isi schimbe comportamentul cand starea sa interna se modifica. Schimbarea are loc prin folosirea mostenirii, clasele derivatate reprezentand starile si functionalitatea. Aplicabilitate: - In cazul in care avem nevoie de o clasa context care sa reprezinte o singura interfata catre exterior. Acest lucru se obtine folosind o clasa de baza abstracta State. - Cand vrem sa reprezentam diferite stari sub forma unor clase derivate dintr-o clasa de baza State. Beneficii: -Codul este mai curat cand fiecare stare este o clasa. - Folosirea claselor in loc de constant. (com)Command Conform sablonului command un obiect poate incapsula toate informatiile necesare pentru apelarea unei metode a altui obiect, cum ar fi: numele metodei de apelat, obiectul ce detine metoda si valorile de transmis parametrilor. Beneficiile acestui sablon tin de faptul ca executia unei anumite metode poate fi pregatita din timp, in asa fel incat aceasta sa fie lansata fara sa i se stie numele, obiectul de care apartine si momentul exact al executiei. Sablonul command poate fi utilizat pentru a realiza aplicatii cu: - functionalitati de tip undo; - comportament tranzactional; - progress bar sincronizat cu executia unui grup de comenzi; functionalitati de tip wizard; - inregistrari de macro-uri; (com) Interpreter Sablonul interpreter descrie cum se pot interpreta expresiile intr-un anumit limbaj. El isi gaseste utilitatea in aplicatiile economice in care se doreste salvarea unor formule de calcul intr-un format accesibil utilizatorilor finali si folosirea ulterioara de catre aplicatie a acestor formule. Conform sablonului interpreter atat operanzii, cat si operatorii dintr-o expresie ar trebui sa aiba aceeasi interfata.

(com)Visitor Reprezinta o informatie ce urmeaza a fi executata asupra unui element al unei sructuriobiect. Visito-ul iti permite sa definesti o noua operatie fara sa schimbi clasele elementelor saupra carora operezi. Considerand un compilator care reprezinta programele ca arbori de sintaxe abstracte. Va fi nevoie executarea de operatia asupra arborilor de sintaxe abstracte pentru analize ca verificarea daca toate variabilele sunt definite. De asemenea va fi necesara generarea de cod. Deci este posibila definirea operatiilor pentru verificarea tipurilor, optimizarea codulu, verificarea daca variabilelor leau fost asignate valori inainte de utilizare, si asa mai departe. Mai mult decat atat , putem folosi arbori de sintaxe abstracte pentru preaty-printing, restructurarea programelor, instrumentarea codurilor. abloanele creaionale sunt utilizate de obicei pentru a separa crearea obiectelor de utilizarea lor. Scopul principal al unui astfel de demers este de a permite introducerea n sistem a noilor tipuri derivate fr a fi necesare schimbri asupra codului ce folosete clasele de baz.