Sunteți pe pagina 1din 10

Șabloanele de proiectre creaționale .

- Șabloane de proiectare care tratează mecanismele de creare a obiectelor


 Obiectele pot fi create într-o manieră adaptabilă la diverse situații
- Fac sistemul independent de modul în care obiectele sunt create, compuse și
reprezentate
 Încapsulează cunoștințele privind clasele concrete pe care le
utilizează sistemul
 Ascund modul în care instanțele acestor clase sunt create și
compuse
- Devin importante când evoluția unui sistem se bazează mai mult pe
compunere decât pe moștenire
 În locul unei ierarhii prestabilite , elementele unei mulțimi mici de
comportamente fundamnetale pot fi combinate în orice număr de
comportamente mai complexe
- Pot introduce constrângeri asupra următoarelor situații:
 Cine poate crea obiecte
 Cum sunt create obiectele
 Când sunt create obiectele

Simple Factory (Fabrica Simplă) Fabrica simplă este utilă deoarece pot
exista mai mulți clientiș; fabrica simplă
poate fi definită și ca metodă statică
(apel mai simplu) Fabria simpla nu
este un șablon de proiectare ci un
idiom de programare
Factory Method (Metoda fabrica) Definește o interfață pentru crearea unui
obiect , dar lasă subclasele să decidă ce
clasă să instanțieze ( permite unei clase
să cedeze subclaselor instanțierea de
obiecte)
Metoda fabrică se folosește când : o
clasă nu poate anticipa din ce clasă
trebuie să creeze un obiect , o clasă
dorește ca specificarea clasei obiectului
creat să fie făcută de subclasele ei ,
informațiile despre delegare trebuie
localizate
Abstract Factory (Fabrica abstracta) Șablonul Fabrica abstractă asigură o
interfață pentru creare unor familii de
obiecte înrudite sau dependente fără a le
specifica clasele concrete.
Fabrica abstractă se folosește când :
sistemul trebuie să fie independent de
modul în care îi sunt create , compuse
sau reprezentate produsele;sistemul
trebuie configurat cu 1 din mai multe
familii de produse ,se dorește furnizarea
unei biblioteci de produse și prezentarea
doar a interfețelor nu și a implementării
acestora
Singleton Uneori este nevoie să garantăm faptul că
o clasă să aibă o singură instanță (bazin
de resurse – fire de executie, conexiuni
de rețea – registrul windows,gestionarea
unui set de preferințe) .
Un Singleton este o clasă care poate
avea doar o singură instanță.
Șablonul Singleton asigură faptul că o
clasă are doar o singură instanță și
furnizează un punct de access global
către aceasta .
Singleton-ul este o modalitate de lucru
cu stări globale. Stările globale trebuie
evitate pe cât posibil deoarece : pot fi
modificare de orice parte din program,
două apeluri identice pot avea rezultate
diferite dacă stările globale, sunt greu de
testat
Prototip Șablonul prototip precizează , folosind
o instanță prototip , tipurile de obiecte
ce vor fi create și creează noile obiecte
copiind acest prototip. Idee de bază :
utilizarea unei instanțe tipice pentru a
crea o instanță înrudită, folosește
clonarea ( implementată de o metodă
clone() ) . Asemănător cu metoda
fabrică , dar se returnează un obiect de
același tip, nu un Produs.
Utilizează interfețe pentru a decupla
clientul de produsul clonat. Nu specifică
dacă clonarea este superficială sau
profundă . Tipul depinde de problema
curentă.
Un manager de prototipuri este o clasă
utilizată pentru a adăuga și regăsi
prototipuri într=o manieră centralizată
pe baza unor parametri , de exemplu
indexi numere întrebi sau enumerări
Constructor (Builder) Șablonul Constructor separă contrucția
unui obiect complex de reprezentarea
aestuia , astfel încât același proces de
construcție să poată crea reprezentări
diferite . Șablonul este des folosi în
realizarea parserelor pentru diferite
formate , când procesul de construcție
trebuie să permită reprezentări diferite
pentru obiectul construit

Metoda fabrică folosește moștenirea ( se derivă clasa și se implementează metoda


abstractă) . Fabrica abstractă folosește compunerea (subclasele arată cum se
produc produsele , pentru utilizarea unei fabrici, aceasta se instanțiază)

În Fabrica abstractă adăugarea unui produs necesită schimbarea interfeței fabricii


– implicit schimbarea tuturor subclaselor (metoda fabrică creează un singur tip
de produs, fabrica abstractă creează familii de produse , deci are nevoie de o
interfață mai complexă.

Constructorul creează un obiect complex pas cu pas .Fabrica abstractă creează


familii de obiecte , câte un component odată . Produsul este returnat de
Constructor ca ultim pas , Fabrica abstractă returnează un produs imediat .
Constructorul încapsulează logica modului în care este asamblat un obiect
complex, astfel încât clientul poate doar să crează o configurație, iar directorul
direcționează logica de construire. Fabrica abstractă este preocupată de CE se
realizează , Constructorul este preocupat de CUM se realizează
Șabloane de proiectare structurale
În ingineria software, şabloanele structurale sunt şabloane ce facilitează proiectarea
prin identificarea unui mod simplu de a realiza relațile între entități. Ele arată cum
pot fi lipite împreună diferite bucăţi ale unui sistem, într-un mod flexibil și
extensibil.

Adaptorul ( Adapter) Șablonul Adaptor convertește interfața


unei clase în altă interfață pe care o
așteaptă clientul . Adaptorul permite să
funcționeze împreună clase care altfel
nu ar putea din cauza interfețelor
incompatibile.
Adaptorul de obiecte este mai flexibil
(poate adapta nu numai clasa Adaptee ci
și orice clasă derivată a acestuia.
Adaptorul de clase este mai eficient (un
singur obiect adaptor vs două obiecte :
un adaptor și un adaptat)
Fațada (Façade) Șablonul Fațada asigură o interfață
unificată la o mulțime de interfețe dintr-
un subsistem . Fațata definește o
interfață de nivel mai înalt care face
subsistemul mai ușor de utilizat. Fațada
nu numai că simplifică o interfață, ci și
decuplează clientul de subsistemul de
componente (subsistemul poate fi de
asemenea accesat direct , fațada nu
încapsulează subsistemul).
Atât Fațada cât și Adaptorul pot
împacheta una sau mai multe clase
(scopul adaptorului este să
convertească interfața , scopul fațadei
este să simplifice interfața)
Principiul cunoașterii minime Se recomandă apelul metodelor numai
din : obiectul însuși , câmpurile
obiectului , obiectele primite ca
parametri în metode, obiectele
instanțiate în metode. Nu se recomandă
apelul metodelor din obiectele returnate
de alte metode
Decoratorul / principiul deschis - Principiul deschis – închis : clasele
închis trebuie să fie deschise pentru extinderea
dar închise pentru modificări , utilizarea
principiului introduce de obicei noi
niveluri de abstractizare , care cresc
complexitatea codului
Șablonul Decorator atașează
reponsabilități suplimentarea unui obiect
în mod dinamic . Decoratorii asigură o
alternativă flexibilă la derivare pentru
extinderea funcționalității
Decoratorii au același tip ca și obiectele
decorate (putem trimite ca parametru un
obiect decorat în locul obiectului inițial)
.Decoratorul folosește moștenirea
pentru a prelua tipul obiectului decorat
și compunerea pentru a-I schimba
comportamentul . Se poate utiliza unul
sau mai mulți decoratori pentru un
obiect. Obiectele pot fi decorate dinamic
în momentul execuției . Decoratorul își
poate adăuga propriul comportament
înainte sau după delegare
Puntea / Bridge Șablonul Punte decuplează o
abstracțiune de implementarea ei , astfel
încât cele două să poată varia în mod
independent .
Șablonul Punte permite unui proiectant
să furnizeze o interfață simplă pentru
abstracțiune și o interfață puternică și
complexă pentru implementare .
Șablonul Punte descompune interfața și
implementarea unei componente în
ierarhii de clase independente . Clientul
interacționează cu clasa de interfață iar
cererile sunt delegate către clasa de
implementare .
Proxy / delegare Tipuri de delegare : delegare la distanță
(remote proxy), delegare virtuală
(virtual proxy) , delegarea de protecție
(protection proxy) , referință inteligentă
(smart reference).
Șablonul Proxu asigură un surogat sau
un înlocuitor pentru alt obiect pentru a
controla accesul la acesta.
Delegarea la distanță controlează
accesul către un obiect nelocal,
delegarea virtuală – controlează accesul
la o resursă costisitor de creat ,
delegarea de protecție – controlează
accesul la o resursă pe bază unor
drepturi de acces , referință inteligentă –
copierea la scriere , blocarea unui obiect
, numărarea referințelor .
Categoria muscă Ideea de bază este partajarea instanțelor.
Fiecare instanță are :date intrinseci
(interne,constante) , date extrinseci
(externe,variabile). De obiecei exsită o
Fabrică pentru instanțierea obiectelor
Categorie muscă.
Șablonul Categorie muscă folosește
partajarea pentru a gestiona eficien un
număr mare de obiecte de dimensiuni
mici . Obiectele flyweight sunt obiecte
parțiale (instanțe virtuale) care se
completează cu starea externă .
Compunerea Șablonul Compunerea compune
obiecte în structuri de tip arbore pentru a
reprezenta ierarhii parte – întreg.
Șablonul permite clienților să trateze
uniform obiecte individuale și
compuneri de obiecte (pot fi ignorate
diferențele dintr obiecte compuse și
obiectele elementare. Șablonul
Compunere are 2 responsabilități :
gestionarea ierarhieri , executarea
oeprațiilor legate de meniuri.
Șablonul Compunere este uneori
utilizat împreună cu șablonul
Decorator. Când se utilizează
împreună, ei vor avea de obicei o clasă
părinte comună. Decoratorii vor trebui
să implementeze interfața Component
cu operații precum add, remove și
getChild
Iterator Șablonul Iterator asigură o cale de
accesare secvențială a elementelor unui
obiect agregat , fără a expune
reprezentarea lui de bază . Metodele
Iteratorului poate avea nume diferite .
Există Iteratori interni și externi .
Iteratorul extern este controlat de client ,
iteratorul intern este controlat de
iteratorul însăși, căruia trebuie să I se
spună ce operații să efectueaze cu
elementele pe care le parcurge .
Iteratorii sunt deseori aplicați pe
structuri recursive precum obiectele
Compuse .Iteratorii polimorficii se pot
baza pe metode fabrică pentru a
instanția subclasele iterator corecte .

Adaptorul permite utilizarea unor clase fără a modifica nici codul client nici codul
țintă . Decoratorul permite adăugarea de noi funcționalități fără modificări în cod
(adaptorul convertește interfețe , decoratorul nu , decoratorul schimbă
comportamentul , adaptorul nu).

Decoratorii pot fi creați cu șabloanele Fabrică și Constructor.

Adaptorul asigură o interfață diferită . Decoratorul asigură aceeași interfață, dar


cu noi funcționalități. Proxy-ul asigură tot aceeași interfață, dar cu scop diferit –
interceptează un apel pe care îl trimite mai departe obiectului țintă ; chiar dacă sunt
incluse și funcționalități noi, nu aceasta este scopul principal. Proxy-ul poate să și
instanțieze obiecte . Decoratorul nu ( primește obiectul de decorat)

Categoria muscă diferă de prototip deoarece nu se folosește clonarea pentru


schimbarea stării interne a obiectelor flyweight .Categoria muscă diferă de
Singleton deoarece aici există câte o instanță pentru fiecare caz diferit, nu doar una
singură globală . Deseori obiectele flyweight sunt create de o Fabrică , dintr-un
bazin de obiecte (de ex. un dictionary/hashtable, în care cheia este cazul ,
particularizarea obiectului.) Și pentru Categoria muscă se poate utiliza metoda
copierii la scriere (proxy)
Șabloane de proectare comportamentale
Şabloanele comportamentale descriu modurile în care obiectele și clasele
interacționează și împart responsabilitățile între ele.

Observator Șablonul Observer definește o


dependență 1 la N între obiecte , astfel
încât în cazul în care un obiect își
schimbă starea , vor fi înștiințate și
actualizate automat toate obiectele sale
dependente .În șablonul Observator :
subiectul este singurul proprietar al
datelor caracteristice șablonului ,
subiectul știe doar că observatorii
implementează o interfață , se pot
adăuga oricând noi observatori , se pot
adăuga not tipuri de observatori ,
schimbările din subiect nu afectează
observatorii și viceversa
Comandă Șablonul Comandă încapsulează o
cerere ca obiect ,permițând :
parametrizarea clienților cu diferite
cereri (trimiterea ca parametru a unei
funcții încapsulate într-un obiect) ,
formarea unei cozi de cereri sau
stocarea istoricului acestora , asigurarea
suportului pentru anularea operațiilor
Lanțul responsabilităților Șablonul Lanțul responsabilităților
evită cuplacare între expeditorul și
destinatarul unei cereri, acordând mai
multor obiecte o șansă de a rezolva
cererea. Șablonul înlănțuie obiectele
destinatar și trece cererea de-a lungul
lanțului până când un obiect o rezolvă .
Lanțul responsabilităților poate fi
aplicat în conjuncție cu șablonul
Compunere
Mediator Șablonul Mediator definește un obiect
care încapsulează modul în care
interacționează o mulțime de obiecte .
Acest șablon promovează cuplarea
slabă, interzicând obiectelor să facă
referințe explicite unul la celălalt și
permite modificarea independetă a
interacțiunilor .
Memento Șablonul memento capturează și
exteriorizează starea internă a unui
obiect fără a viola încapsularea, astfel
încât obiectul să poată fi readus la
respectiva stare
Strategie Șablonul Strategie definește o familie
de algoritmi, încapsulează fiecare
algoritm și îl face interschimbabili.
Acest șablon permite algoritmului să
varieze independent de clienții care îl
utilizează.
Metoda tipar Șablonul Metoda tipar definește
scheletul unui algoritm dintr-o operație ,
transferând unii pași către subclase.
Șablonul permite subclaselor să
redefinească anumiți pași dintr-un
algoritm fără a schimba structura
acestuia.
Stare Șablonul Stare permite unui obiect să-și
modifice comportamentul când starea sa
internă se schimbă . Obiectul va părea
că își schimbă clasa
Interpretorul Șablonul Intepretor definește o
reprezentre a gramaticii unui limbaj
împreună cu un interpretor care
utilizează reprezentarea pentru a
interpreta propozițiile din limbaj.
Interpretorul poate folosi un Iterator
pentru a traversa structura.
Vizitatorul Șablonul Vizitator reprezintă o operație
care va fi efectuată pe elementele unei
structuri de obiecte , permițând definirea
unei operații noi fără a schimba claseel
elementelor pe care operează .

Fațada abstractizează un subsistem în mod unidirecțional . Mediatorul permite


colaborarea obiectelor și acționează multidirecțional . Colegii pot să comunice cu
mediatorul folosind șablonul Observator . Obiectul ChangeManager din șablonul
Observator este un mediator și poate fi singleton
O Comandă poate utiliza obiectele Memento pentru operațiile de anulare .
Obiectele Memento pot fi manipulate cu ajutorul unui Iterator

Metoda tipar utilizează moștenirea pentru a varia părți ale unui algoritm .
Strategia utilizează compunerea pentru a varia întrebul algoritm. Constructorul
construiește un obiect în mai mulți pași . Metoda tipar execută un algoritm
compus din mai mulți pași . Ca și metoda fabrică , metoda tipar lasă subclasele
să decidă asupra unor implementări .

Strategia și Stare au diagrame asemănătoare. Strategia este o alternativă la


moștenire. Starea este o alternativă la instrucțiunile condiționale .Strategiile sunt
de obicei specificate de la început – chiar dacă se pot schimba ușor. Strările se
schimbă dinamic prin însăși motivația șablonului.

Obiectele Stare pot fi obiecte de tip Categoria muscă (flyweight) sau obiecte
Singleton.

Vizitatorul poate fi utilizat la aplicarea unei operații pe o structură Compusă .

Pentru vizitarea fiecărui element al unei colecții se poate folosi Iteratorul acesteia.
Vizitatorul poate fi utilizat pentru a păstra într-o singură clasă comportarea
fiecărui nod din arborele sintactic al unui Interpretor .

S-ar putea să vă placă și