Sunteți pe pagina 1din 3

Observer

Scop
Define ş te o dependenţă de tipul unul - la -ma i-mulţi între ob iecte astfel încât atunci când un obiect îşi schimbă starea,
toate dependenţele sale sunt anunţate şi actualizate automat
Aplicabilitate
-Când o abstracţiune are două aspecte, una dependentă de cealaltă; încapsularea acestor aspecte în obiecte diferite
permite varierea şi refolosirea lor independentă;
-Când modificarea unui obiect solicită modificarea altora, şi nu ştim exact câte obiecte trebuie modificate (modificări
dinamice, la execuţie);
-Când un obiect trebuie să poată notifica alte obiecte fără să presupună cine sunt acestea
Structura:

Participanţi & Colaborări


Subject
-îşi cunoaşte observatorii (în număr oarecare)
-defineşte o interfaţă pentru ataşarea şi detaşarea de obiecte Observer
Observer
-defineşte o interfaţă de actualizare pentru obiectele ce trebuie notificate de modificările din subiect
ConcreteSubject
-stochează starea de interes pentru obiectele ConcreteObserver
-trimite o notificare observatorilor săi când îşi modifică starea
ConcreteObserver
-menţine o referinţă către un obiect ConcreteSubject
-stochează starea ce trebuie să rămână consistentă cu a subiectului
-implementează interfaţa de actualizare din Observer pentru a-şi menţine starea consistentă cu a subiectului

Consecinte:
-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 numărul lor. -Observerul decide dacă tratează sau ignoră notificarea.
Modificări neaşteptate
-Întrucât observerii nu ştiu unul de existenţa celuilalt, pot apare modificări incorecte, în cascadă

Mediator
Scop
Defineşte un obiect ce încapsulează cum interacţionează o mulţime de obiecte
Promovează cuplajul redus prin faptul că obiectele nu mai fac referinţă direct unele la altele, permiţând varierea
independentă a interacţiunii lor
Aplicabilitate
O mulţime de obiecte comunică într-un mod bine definit dar complex;
Interdependenţele sunt nestructurate şi dificil de înţeles;
Refolosirea unui obiect este dificilă deoarece comunică cu prea multe alte obiecte
Un comportament distribuit între mai multe clase ar trebui să fie readaptabil fără derivare
Structura:

Participanţi & Colaborări


Mediator (DialogDirector)
-Defineşte o interfaţă pentru comunicarea cu obiectele Colleague
ConcreteMediator (FontDialogDirector)
-Implementează comportamentul cooperativ prin coordonarea obiectelor Colleague
-Îşi cunoaşte şi îşi menţine “colegii”
Clasele Colleague (ListBox, EntryField)
-Fiecare clasă Colleague îşi cunoaşte obiectul Mediator
-Fiecare coleg comunică cu mediatorul său oricând ar fi comunicat cu un coleg

Consecinte:

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
-Înlocuieşte interacţiunile mai-mulţi-la-mai-mulţi cu interacţiuni unul-la-mai-mulţi (mai uşor de înţeles, extins,
menţinut)
Abstractizează cooperarea obiectelor
-Ajută la clarificarea interacţiunilor independent de comportamentul individual
Centralizează controlul
-Mediatorul se poate transforma într-un monolit dificil de întreţinut

Memento

Scop
Captează şi externalizează starea internă a unui obiect astfel încât obiectul poate fi restaurat în această stare mai
târziu, fără a sparge încapsularea

Aplicabilitate
(o parte din) starea unui obiect trebuie salvată pentru a readuce mai târziu obiectul în această stare
O interfaţă directă pentru obţinerea stării ar expune detalii de implementare şi ar sparge încapsularea obiectului

Structura:
Participanţi & Colaborări
Memento
-Stochează starea internă a obiectului Originator (oricât e necesar)
-Protejează împotriva accesului din partea altor obiecte decât Originator (Originator vede o interfaţă extinsă din
Memento, pentru a-şi reface starea; Caretaker vede doar o interfaţă restrânsă- cât să poate trece un obiect memento
obiectelor care au nevoie de el)
Originator
-Creează un memento conţinând un extras al stării sale interne
-Foloseşte Memento pentru a-şi reface starea internă
Caretaker (mecanism de undo)
-Răspunde de păstrarea în siguranţă a memento-ului
-Nu examinează şi nu operează niciodată cu conţinutul memento-ului

Consecinte:

Protejează graniţele încapsulării


Simplifică Originatorul
Acesta nu e nevoit să reţină stări anterioare la care ar fi necesar să revină
Uneori folosirea este costisitoare
Dacă este multă informaţie de copiat sau atunci când clienţii creează des memento-uri
Costuri ascunse în manevrarea memento-urilor
Un caretaker nu ştie exact cât să aloce pentru stocarea unui memento (pentru că el nu are acces la informaţiile din
interior)

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