Sunteți pe pagina 1din 8

Sabloane Comportament

ablonul Chain of Responsibility


Scop
Decupleaz transmitorul cererii de primitor
oferind mai multor obiecte ansa de a trata cererea
Pune primitorii ntr-un lan i transmite cererea de-a lungul lanului
pn ce un obiect o trateaz

Aplicabilitate
mai mult dect un obiect poate trata o cerere
i nu cunoatem apriori cine o va trata
mulimea de obiecte ce pot trata cererea trebuie s fie specificabil dinamic
trimitem o cerere la mai multe obiecte fr s specificm primitorul

Structur

Participani & Colaborri


Handler
definete interfaa pentru tratarea cererilor
poate implementa link-ul ctre succesor
ConcreteHandler
fie trateaz cererea pentru care este rspunztor ...
dac este posibil
... fie trimite cererea mai departe succesorului su
Client
iniiaz transmiterea cererii ctre un obiect ConcreteHandler din lan

Consecine
Cuplaj redus
clientul (trimitorul) nu trebuie s tie cine i va trata cererea
trimitorul i primitorul nu se cunosc unul pe cellalt
n loc ca trimitorul s cunoasc toi potenialii primitori, se pstreaz doar o referin la
urmtorul handler din lan.
simplific interconexiunile dintre obiecte
Flexibilitate n asignarea responsabilitilor ctre obiecte
responsabilitile se pot aduga sau schimba
lanul se poate modifica la execuie
Cererile pot rmne netratate
...dac lanul nu a fost configurat corect

Pagina 1 din 8
Sabloane Comportament
ablonul Command
Scop
ncapsuleaz cereri ca obiecte, i permite:
parametrizarea clienilor cu diferite cereri
nlnuirea sau log-area cererilor
suport pentru operaii anulabile (UNDO)

Aplicabilitate
Parametrizarea obiectelor
Specificarea, nlnuirea, i executarea cererilor la diferite momente
Suport undo
Modelarea tranzaciilor
structurarea sistemelor construite pe operaii primitive, n jurul operaiilor de nivel nalt
interfaa comun invocarea identic a tuturor tranzaciilor

Structur

Participani
Command
declar interfaa pentru executarea operaiei
ConcreteCommand
asociaz o aciune concret unei cereri
Invoker
solicit comenzii s execute cererea
Receiver
tie cum s execute operaiile asociate cu ndeplinirea unei cereri.
Client
creeaz o comand concret (ConcreteCommand) i seteaz primitorul su

Consecine
Decupleaz Invoker de Receiver
Comenzile sunt obiecte ale unor clase
pot fi manevrate i extinse
Comenzi compuse (Composite Commands)
a se vedea i ablonul Composite
Uor de adugat comenzi noi
Invoker nu se modific
cod stabil- Principiul Deschis-nchis
Potenial pentru un exces de clase de tip command

Inteligena obiectelor Command


Idioate"
deleg totul ctre Receiver ; folosite doar pentru a decupla Sender de Receiver
"Genii"
fac totul singure fr s delege nimic ; utile dac nu exist primitor (receiver) ; las
ConcreteCommand s fie independent de alte clase
Istee"
gsesc dinamic primitorul (Receiver)

Pagina 2 din 8
Sabloane Comportament
ablonul Iterator
Scop
Furnizeaz o modalitate de accesare secvenial a elementelor unui agregat, fr a expune
reprezentarea care st la baza acestora

Aplicabilitate
Pentru a accesa coninutul unui obiect agregat fr s i expunei reprezentarea intern
Pentru a susine traversri multiple ale obiectelor agregat
Pentru a furniza o interfa uniform de traversare a diferitelor structuri agregat (i.e. pentru a
susine iteraii polimorfice)

Structur

Participani
Iterator
Definete o interfa pentru traversarea i accesarea elementelor
ConcreteIterator
Implementeaz interfaa Iterator
ine evidena poziiei curente n traversarea agregatului
Aggregate
Definete o interfa pentru crearea unui obiect Iterator
ConcreteAggregate
Implementeaz interfaa de creare Iterator, pentru a ntoarce o instan potrivit de ConcreteIterator

Consecine
1. Sprijin variaiunile n traversarea unui agregat (ex. n generarea de cod- arborele de analiz poate
fi traversat n inordine sau preordine; folosind iteratori, se schimb doar o instan de iterator cu alta);
2. Iteratorii simplific interfaa agregatului;
3. Pot exista mai multe traversri simultan
Fiecare iterator ine evidena strii propriei iteraii

Pagina 3 din 8
Sabloane Comportament
ablonul Mediator

Scop
Definete un obiect ce ncapsuleaz cum interacioneaz o mulime de obiecte
Promoveaz cuplajul redus prin faptul c obiectele nu mai fac referin direct unele la altele,
permind varierea independent a interaciunii lor

Aplicabilitate
O mulime de obiecte comunic ntr-un mod bine definit dar complex;
Interdependenele sunt nestructurate i dificil de neles;

Refolosirea unui obiect este dificil deoarece comunic cu prea multe alte obiecte
Un comportament distribuit ntre mai multe clase ar trebui s fie readaptabil fr derivare

Structur

Participani & Colaborri


Mediator (DialogDirector)
Definete o interfa pentru comunicarea cu obiectele Colleague
ConcreteMediator (FontDialogDirector)
Implementeaz comportamentul cooperativ prin coordonarea obiectelor Colleague
i cunoate i i menine colegii
Clasele Colleague (ListBox, EntryField)
Fiecare clas Colleague i cunoate obiectul Mediator
Fiecare coleg comunic cu mediatorul su oricnd ar fi comunicat cu un coleg

Consecine
Limiteaz derivarea
Modificarea comportamentului necesit doar derivarea Mediatorului, clasele Colleague pot fi
refolosite ca atare
Decupleaz colegii
Putem varia i refolosi clasele Colleague i Mediator independent
Simplific protocoalele obiectelor
nlocuiete interaciunile mai-muli-la-mai-muli cu interaciuni unul-la-mai-muli (mai uor de
neles, extins, meninut)
Abstractizeaz cooperarea obiectelor
Ajut la clarificarea interaciunilor independent de comportamentul individual
Centralizeaz controlul
Mediatorul se poate transforma ntr-un monolit dificil de ntreinut

Pagina 4 din 8
Sabloane Comportament

SABLONUL MEMENTO

Scop

Capteaz i externalizeaz starea intern a unui obiect astfel nct obiectul poate fi restaurat n aceast
stare mai trziu, fr a sparge ncapsularea

Aplicabilitate
Folosii cnd:
(o parte din) starea unui obiect trebuie salvat pentru a readuce mai trziu obiectul n aceast stare
O interfa direct pentru obinerea strii ar expune detalii de implementare i ar sparge ncapsularea
obiectului

Structur

Participani
Memento
Stocheaz starea intern a obiectului Originator (orict e necesar)
Protejeaz mpotriva accesului din partea altor obiecte dect Originator (Originator vede o
interfa extins din Memento, pentru a-i reface starea; Caretaker vede doar o interfa restrns- ct s
poate trece un obiect memento obiectelor care au nevoie de el)
Originator
Creeaz un memento coninnd un extras al strii sale interne
Folosete Memento pentru a-i reface starea intern
Caretaker (mecanism de undo)
Rspunde de pstrarea n siguran a memento-ului
Nu examineaz i nu opereaz niciodat cu coninutul memento-ului

Consecine

Protejeaz graniele ncapsulrii


Simplific Originatorul
Acesta nu e nevoit s rein stri anterioare la care ar fi necesar s revin
Uneori folosirea este costisitoare
Dac este mult informaie de copiat sau atunci cnd clienii creeaz des memento-uri
Costuri ascunse n manevrarea memento-urilor
Un caretaker nu tie exact ct s aloce pentru stocarea unui memento (pentru c el nu are
acces la informaiile din interior)

Pagina 5 din 8
Sabloane Comportament
ablonul Observer

Scop
Definete o dependen de tipul unul-la-mai-muli ntre obiecte astfel nct atunci cnd un obiect i
schimb starea, toate dependenele sale sunt anunate i actualizate automat

Aplicabilitate
Cnd o abstraciune are dou aspecte, una dependent de cealalt; ncapsularea acestor aspecte n
obiecte diferite permite varierea i refolosirea lor independent;
Cnd modificarea unui obiect solicit modificarea altora, i nu tim exact cte obiecte trebuie
modificate (modificri dinamice, la execuie);
Cnd un obiect trebuie s poat notifica alte obiecte fr s presupun cine sunt acestea (CUPLAJ
REDUS NTRE ACESTE OBIECTE)

Structura

Participani
Subject
i cunoate observatorii (n numr oarecare)
definete o interfa pentru ataarea i detaarea de obiecte Observer
Observer
definete o interfa de actualizare pentru obiectele ce trebuie notificate de modificrile din
subiect
ConcreteSubject
stocheaz starea de interes pentru obiectele ConcreteObserver
trimite o notificare observatorilor si cnd i modific starea
ConcreteObserver
menine o referin ctre un obiect ConcreteSubject
stocheaz starea ce trebuie s rmn consistent cu a subiectului
implementeaz interfaa de actualizare din Observer pentru a-i menine starea consistent cu a
subiectului

Consecine
Cuplaj minimal i abstract ntre subiect i observatori
Suport pentru comunicare de tip difuzare (broadcast)
Notificarea trimis de subiect nu trebuie s-i specifice primitorul, singura responsabilitate a
subiectului este s-i notifice observatorii, indiferent de numrul lor. Observerul decide dac trateaz sau ignor
notificarea.
Modificri neateptate
ntruct observerii nu tiu unul de existena celuilalt, pot apare modificri incorecte, n cascad

Pagina 6 din 8
Sabloane Comportament
ablonul State

Scop
permite unui obiect s i modifice comportamentul cnd i se modific starea intern
obiectul va prea c i schimb clasa

Aplicabilitate
comportamentul obiectului depinde de starea sa
trebuie s i modifice comportamentul la execuie n funcie de stare
operaii cu instruciuni condiionale multiple, depinznd de starea obiectului
starea reprezentat de una sau mai multe constante enumerate
mai multe operaii cu aceeai structur condiional

Structur

Participani
Context
definete interfaa de interes pentru clieni
menine o instan a unei subclase ConcreteState
State
definete o interfa pentru ncapsularea comportamentului asociat cu o stare particular a
Contextului
ConcreteState
fiecare subclas implementeaz un comportament asociat cu o stare a Contextului

Consecine
Localizeaz comportamentul specific strilor i partiioneaz comportamentul pentru stri
diferite
pune tot comportamentul asociat unei stri ntr-un obiect-stare
uor de adugat stri i tranziii noi
contextul devine Deschis-nchis
Comportament mprtiat ntre mai multe subclase ale State
numrul de clase crete, mai puin compact dect o singur clas
util dac sunt multe stri...
Face explicit tranziia ntre stri
mai mult dect o simpl modificare a unei valori interne
strile primesc statutul unui obiect de sine stttor!
Protejeaz Contextul de stri interne inconsistente

Pagina 7 din 8
Sabloane Comportament
ablonul Strategy

Scop
Definete o familie de algoritmi, ncapsuleaz fiecare algoritm, i face interschimbabili
Permite algoritmului s varieze independent de clienii ce l folosesc

Aplicabilitate
Sunt necesare variante diferite ale unui algoritm
Un algoritm folosete date despre care clienii nu trebuie s tie
evit expunerea structurilor de date complexe, specifice algoritmului
Multe clase relaionate difer doar prin comportament
configureaz o clas cu un comportament particular

Structur

Participani
Strategy
declar o interfa comun tuturor algoritmilor.
Context folosete aceast interfa pentru a apela algoritmul definit de o clas
ConcreteStrategy
ConcreteStrategy
implementeaz algoritmul folosind interfaa Strategy
Context
configurat cu un obiect ConcreteStrategy
poate defini o interfa ce permite obiectelor Strategy s i acceseze datele

Consecine Pozitive
Familii de algoritmi nrudii
de obicei ofer implementri diferite ale aceluiai comportament
alegerea se face innd cont de un compromis timp-spaiu
Alternativ la derivare
Exemplul cu layout managers (soluia Strategy, slide 9)
nc se deriveaz strategiile...
Elimin instruciunile condiionale
multe instruciuni condiionale "invitaie" s aplicm Strategy!

Consecine Negative
Exces de comunicare ntre Strategy i Context
o parte din ConcreteStrategies nu necesit informaiile trimise de Context
Clienii trebuie s fie contieni de diferitele strategii
clienii trebuie s neleag diferitele strategii
SortedList studentRecords = new SortedList(new ShellSort());
Numr sporit de obiecte
fiecare Context folosete obiectele sale concrete de strategie
se poate reduce prin pstrarea strategiilor fr stare (mprirea lor ntre mai multe obiecte)

Pagina 8 din 8