Sunteți pe pagina 1din 4

Sabloane structurale

ablonul Adapter
Scop
Convertete interfaa unei clase ntr-o alt interfa ateptat de client
Permite unor clase cu interfee diferite s lucreze mpreun (prin traducerea interfeelor)
Aplicabilitate
Cnd dorim s folosim o clas preexistent, i interfaa acestei nu se potrivete cu interfaa de
care avem nevoie
Vrem s creem o clas reutilizabil ce coopereaz cu clase nerelaionate i neprevzute (i.e. clase
ce pot avea interfee incompatibile)
(doar pentru adaptor obiect) Cnd avem nevoie s folosim mai multe subclase existente, dar nu e
practic s derivm din fiecare pentru a le adapta interfaa. Un obiect adaptor poate adapta interfaa clasei
sale printe.

Structur
Adapter clas Adapter obiect

Participani
Target (Shape)
Definete interfaa specific domeniului pe care o folosete Clientul
Client (DrawingEditor)
Colaboreaz cu obiecte n conformitate cu interfaa Target
Adaptee (TextView)
Definete o interfa existent ce necesit adaptare
Adapter (TextShape)
Adapteaz interfaa lui Adaptee la interfaa Target

Consecine
Adapter clas Adapter obiect
Adapteaz Adaptee la Target innd cont de Permite unui singur Adapter s lucreze cu
o clas Adapter concret mai multe clase Adaptee- i.e. clasa Adaptee i toate
Permite clasei Adapter s suprascrie o parte subclesele sale, dac acestea exist; Adapter poate
din comportamentul Adaptee, ntruct aduga funcionaliti la toate clasele Adaptee odat
Adapter e o subclas a lui Adaptee Este mai dificil de suprascris comportamentul
Introduce doar un singur obiect, i nu este lui Adaptee; pentru aceasta va fi necesar s derivm
nevoie de indirectare suplimentar cu Adaptee i s facem Adapter s se refere la subclas
pointeri pentru a obine obiectul adaptat direct, nu la Adaptee
Cantitatea de munc necesar n Adapter
depinde de ct de similare sunt Adaptee i Target
(poate merge de la redenumirea unor operaii pn
la scrierea unui set complet diferit de operaii)
Adaptori conectabili (pluggable): clase mai
uor de refolosit ntruct au fost construite cu
interfee adaptabile din start (vezi la Implementare)

Pagina 1 din 4
Sabloane structurale
ablonul Composite
Scop
Trateaz obiectele individuale i compunerile acestor obiecte uniform
Compune obiectele n structuri arborescente pentru a reprezenta agregri recursive

Aplicabilitate
reprezentarea ierarhiilor de obiecte de tip parte-ntreg
abilitatea de a ignora diferena dintre compuneri de obiecte i obiecte individuale

Structur

Participani & Colaborri


Component
declar interfaa pentru obiectele din compunere
implementeaz comportamentul implicit pentru componente, cnd aceasta este posibil
Composite
definete comportamentul pentru componentele cu copii
stocheaz componentele-copil
implementeaz operaii specifice copiilor
Leaf
definete comportamentul pentru obiectele primitive din compunere
Client
manipuleaz obiectele din compunere prin interfaa Componentei

Consecine
Definete ierarhii uniforme de clase
compunere recursiv de obiecte
Face clienii simpli
nu trebuie s tie dac este o frunz sau un compus
simplific codul deoarece evit tratarea diferit a fiecrei clase
Mai uor de extins
uor de adugat noi clase Composite sau Leave
aplicaie fericit a Principiului Deschis-nchis
Design prea general
sunt necesare verificri de tip pentru a restriciona tipurile admise ntr-o anumit structur
compus

Pagina 2 din 4
Sabloane structurale
ablonul Decorator
Schimbarea nveliului unui obiect
Scop
Adaug responsabiliti unui obiect particular, mai degrab dect clasei sale
Ataeaz dinamic responsabiliti adiionale unui obiect.
O alternativ flexibil la derivare
Cunoscut i ca Wrapper
Aplicabilitate
Adaug responsabiliti obiectelor transparent i dinamic
i.e. fr s afecteze alte obiecte
Extinderea prin derivare nu e practic
poate duce la prea multe subclase

Structur

Participani & Colaborri


Component
definete interfaa obiectelor crora li se pot aduga dinamic responsabiliti
ConcreteComponent
obiectele de baz" la care se pot aduga responsabiliti
Decorator
definete o interfa conform cu interfaa clasei Component
pentru transparen
menine o referin ctre un obiect Component
ConcreteDecorator
adaug responsabiliti componentei

Consecine
Mai flexibil dect motenirea static
permite amestecarea i potrivirea responsabilitilor
permite aplicarea unei proprieti de dou ori
Evit clasele ncrcate de prea multe cracteristici specifice n partea de sus a ierarhiei
abordarea "pltete-pe-msur-ce-consumi"
uor de definit noi tipuri de decoraiuni
O mulime de obiecte mici
uor de adaptat, dar dificil de nvat i depanat
Un decorator i componenta sa nu sunt identice
verificarea identitii obiectelor poate genera probleme
Ex. if ( aComponent instanceof TextView ) bla

Pagina 3 din 4
Sabloane structurale
ablonul Flyweight
Scop
Folosete partajarea pentru a suine implementarea eficient a unui numr mare de obiecte cu
granulaie fin (structur complex)- de exemplu caractere individuale sau iconie pe ecran
Aplicabilitate
Folosii cnd toate condiiile de mai jos sunt ndeplinite simultan:
O aplicaie folosete un numr mare de obiecte
Costurile de stocare sunt ridicate din cauza numrului mare de obiecte
Cea mai mare parte din starea unui obiect poate fi fcut extrinsec
Multe grupuri de obiecte se pot nlocui de un numr relativ mic de obiecte partajate, odat ce
am lturat starea extrinsec
Aplicaia nu depinde de identitatea obiectelor. ntruct obiectele flyweight pot fi partajate,
testele de identitate vor ntoarce true pentru obiecte conceptual distincte
Structur

Participani
Flyweight (Glyph)
Declar o interfa prin care flyweight primesc starea extrinsec i pot aciona asupra ei
ConcreteFlyweight (Character)
Implementeaz interfaa Flyweight i adaug stocarea strii intrinseci- independent de
contextul obiectului; trebuie s fie partajabil
UnsharedConcreteFlyweight (Row, Column)
Nu toate subclasele Flyweight trebuie s fie partajate, deseori obiectele
UnsharedConcreteFlyweight au obiecte ConcreteFlyweight drept copii la un anumit nivel al structurii de obiecte
flyweight
FlyweightFactory
Creeaz i administreaz obiectele flyweight
Se asigur c flyweight-urile sunt partajate corect; cnd un client necesit un flyweight,
FlyweightFactory furnizeaz o instan existent sau creeaz una dac astfel de instan nu exist
Client
Menine o referin la flyweight(-uri)
Calculeaz sau stocheaz starea extrinsec a flyweight(-urilor)

Consecine
Flyweight-urile adaug costuri la momentul execuiei (transferul, gsirea i/sau calcularea strii
extrinseci), dar aceste costuri sunt compensate de spaiul eliberat prin fiolosirea ablonului
Cantitatea de spaiu economisit depinde de mai muli factori:
Reducerea numrului total de instane prin partajare
Cantitatea de stare intrinsec pentru fiecare obiect
Dac starea extrinsec e calculat sau stocat
Cel mai mult spaiu se economisete dac obiectele folosesc cantiti susbstaniale de stare
intrinsec i extrinsec, i dac starea extrinsec se poate calcula- n loc s fie stocat

Pagina 4 din 4