Академический Документы
Профессиональный Документы
Культура Документы
catalin.boja@ie.ase.ro
Left: Simply Explained: Code Reuse 2009-1203.By Oliver Widder, Webcomics Geek Aad Poke.
2
acs.ase.ro
catalin.boja@ie.ase.ro
acs.ase.ro
catalin.boja@ie.ase.ro
catalin.boja@ie.ase.ro
acs.ase.ro
catalin.boja@ie.ase.ro
Design-pattern
Un pattern reprezint o soluie
reutilizabila pentru o problema
standard, intr-un anumit context
Faciliteaz reutilizarea
arhitecturilor si a design-ului
software
NU sunt structuri de date
acs.ase.ro
catalin.boja@ie.ase.ro
Design-pattern
A pattern involves a general
description of a recurring solution
to a recurring problem with
various goals and constraints. It
identify more than a solution, it
also explains why the solution is
needed. (James Coplien)
acs.ase.ro
catalin.boja@ie.ase.ro
acs.ase.ro
catalin.boja@ie.ase.ro
System
Application
Subsystem
Macro
Frameworks
Micro
Design-Patterns
Objects
acs.ase.ro
OO Architecture
OOP
catalin.boja@ie.ase.ro
10
Problema:
Nume
Problema
Solutie
Consecinte
Soluie
Consecine
Rezultate
Avantaje si dezavantaje
acs.ase.ro
catalin.boja@ie.ase.ro
11
Istoric Design-Pattern
1970 primele modele legate de conceptual de Window si Desktop
(Smalltalk, Xerox Parc, Palo Alto)
1978 MVC pattern (Goldberg and Reenskaug, Smalltalk, Xerox Parc)
1987 - Kent Beck and Ward Cunningham, Using Pattern Languages
for Object-Oriented Programs, OOPSLA-87 Workshop
1991 - Erich Gamma, an idea for a Ph.D. thesis about patterns
1993 - E. Gamma, R. Helm, R. Johnson, J. Vlissides. Design Patterns:
Abstraction and Reuse of Object-Oriented Design. ECOOP 97 LNCS
707, Springer, 1993
acs.ase.ro
catalin.boja@ie.ase.ro
12
Istoric Design-Pattern
Erich Gamma, Richard Helm,
Ralph Johnson & John Vlissides
(Addison-Wesley, 1995) - Design
Patterns
The Gang of Four (GOF)
Cartea descrie 23 pattern-uri
probleme si soluii ce pot fi
aplicate in numeroase scenarii
Cea mai populara carte de
Computer Software
acs.ase.ro
catalin.boja@ie.ase.ro
13
Utilizare Design-Patterns
Observer in Java AWT si Swing pentru callback-uri
Iterator in C++ STL si Java Collections
Faade in multe librarii Open-Source pentru a ascunde complexitatea
rutinelor interne
Bridge si Proxy in framework-uri pentru aplicatii distribuite
Singleton in Hybernate si NHybernate
acs.ase.ro
catalin.boja@ie.ase.ro
14
Tipuri de Design-Pattern
Creaionale
Iniializarea si configurarea claselor si obiectelor
Structurale
Compoziia claselor si obiectelor
Decuplarea interfeelor si a claselor
Comportamentale
Creaionale
Structurale
Comportamentale
Distribuia responsabilitii
Interaciunea intre clase si obiecte
acs.ase.ro
catalin.boja@ie.ase.ro
15
Tipuri de Design-Pattern
Creaionale
Structurale
Comportamentale
Factory Method
Abstract Factory
Builder
Prototype
Singleton
acs.ase.ro
Adapter
Bridge
Composite
Decorator
Faade
Flyweight
Proxy
catalin.boja@ie.ase.ro
Interpreter
Chain of Responsibility
Command
Iterator
Mediator
Memento
Observer
State
Strategy
Visitor
Template
16
Creational Design-Patterns
Abstract Factory
Pattern pentru crearea de obiecte aflate intr-un anumit context
Builder
Pattern pentru crearea in mod structurat (incremental) de obiecte complexe
Factory Method
Pattern ce defineste o metoda pentru crearea de obiecte din aceeasi familie
(interfata) in subclase
Prototype
Pattern pentru clonarea unor noi instante (clone) ale unui prototip existent
Singleton
Pattern pentru crearea unei singure instante (unica)
acs.ase.ro
catalin.boja@ie.ase.ro
17
Structural Design-Patterns
Adapter:
Adapteaz interfaa unui server/serviciu la client
Bridge:
Decupleaz modelul abstract de implementare
Composite:
Agregarea a mai multor obiecte similare
Decorator:
Extinde intr-un mod transparent un obiect
Facade:
Simplifica interfaa unui modul/subsistem
Flyweight:
Partajare memorie intre obiecte similare.
Proxy:
Interfa ctre alte obiecte/resurse
acs.ase.ro
catalin.boja@ie.ase.ro
18
Behavioral Design-Patterns
Chain of Responsibility:
Gestioneaza tratarea unui eveniment de catre mai multi furnizori de solutii
Command:
Request or Action is first-class object, hence re-storable
Iterator:
Gestioneaza parcurgerea unei colectii de elemente
Interpreter:
Intepretor pentru un limbaj cu o gramatica simpla
Mediator:
Coordoneaza interactiunea dintre mai multi asociati
Memento:
Salvazeaza si restaureaza starea unui obiect
acs.ase.ro
catalin.boja@ie.ase.ro
19
Behavioral Design-Patterns
Observer:
Defineste un hadler pentru diferite evenimente
State:
Gestioneaza obiecte al caror comportament depinde de starea lor
Strategy:
Incapsuleaza diferiti algoritmi
Template Method:
Incapsuleaza un algoritm ai carui pasi depend de o clasa derivate
Visitor:
Descrie metode ce pot fi aplicate pe o structura neomogena
acs.ase.ro
catalin.boja@ie.ase.ro
20
Creational Design-Patterns
Singleton, Abstract Factory, Factory Method, Factory, Builder, Prototype
Modelul SINGLETON
Creational Design-Patterns
SINGLETON- Problema
Se dorete crearea unei singure instane pentru o clas prin care s
fie gestionat o resurs/un eveniment n mod centralizat;
Soluia se bazeaz pe existena unei singure instane ce poate fi
creata o singur dat dar care poate fi referit de mai multe ori;
Asigur un singur punct de acces, vizibil global, la unica instan
Exemple: gestiune conexiune baze de date sau alte resurse;
mecanism de logging unic; manager evenimente; manager resurse
vizuale; manager configurare.
acs.ase.ro
catalin.boja@ie.ase.ro
23
SINGLETON - Diagrama
public class Singleton {
private static Singleton instance =
null;
private Singleton() { }
public static synchronized Singleton
getInstance() {
if (instance == null) {
}
}
acs.ase.ro
catalin.boja@ie.ase.ro
24
SINGLETON - Componente
Singleton()
un constructor privat (apelabil doar din clasa)
Singleton getInstance()
o metoda publica ce da acces la instanta unica
instanta unica este creata la primul apel al metodei
acs.ase.ro
catalin.boja@ie.ase.ro
25
catalin.boja@ie.ase.ro
26
SINGLETON Scenarii
Conexiune unica la baza de date
Gestiune unica fisiere/fisier de configurare
Gestiune unica preferinte Android (SharedPreferences)
Gestiune unica conexiune retea
Gestiune centralizata a accesului la anumite resurse
acs.ase.ro
catalin.boja@ie.ase.ro
27
catalin.boja@ie.ase.ro
29
http://en.wikipedia.org/wiki/Abstract_factory_pattern
acs.ase.ro
catalin.boja@ie.ase.ro
30
AbstractProductA/AbstractProductB
interfete ce definesc tipurile abstracte de obiecte ce pot fi create
ConcreteFactory1/ConcreteFactory2
clase concrete ce implementeaza interfata si metodele prin care sunt create
obiecte de tipul Product
acs.ase.ro
catalin.boja@ie.ase.ro
31
catalin.boja@ie.ase.ro
32
acs.ase.ro
catalin.boja@ie.ase.ro
33
http://www.oodesign.com/factory-method-pattern.html
acs.ase.ro
catalin.boja@ie.ase.ro
35
ConcreteProduct
clasa concreta ce defineste tipul de obiecte ce poate fi creat
Factory
clasa abstracta ce defineste interfata unui generator de obiecte
ConcreteFactory
clasa concreta ce implementeaza generatorul de obiecte
acs.ase.ro
catalin.boja@ie.ase.ro
36
catalin.boja@ie.ase.ro
37
Modelul FACTORY
Creational Design-Patterns
FACTORY - Diagrama
http://www.oodesign.com/factory-pattern.html
acs.ase.ro
catalin.boja@ie.ase.ro
39
acs.ase.ro
catalin.boja@ie.ase.ro
40
Modelul BUILDER
(Adaptive Builder)
Creational Design-Patterns
BUILDER - Problema
acs.ase.ro
catalin.boja@ie.ase.ro
42
BUILDER- Diagrama
http://en.wikipedia.org/wiki/Builder_pattern
acs.ase.ro
catalin.boja@ie.ase.ro
43
BUILDER - Componente
Builder
interfaa abstracta ce definete metodele prin care sunt construite parti ale
obiectului complex
ConcreteBuilder
clasa concreta ce construiete prile si pe baza lor obiectul final
Product
clasa abstracta ce definete obiectul complex ce este construit
Director
clasa concreta ce construiete obiectul complex utiliznd interfaa de tip
Builder
acs.ase.ro
catalin.boja@ie.ase.ro
44
catalin.boja@ie.ase.ro
45
Modelul PROTOTYPE
Creational Design-Patterns
PROTOTYPE - Problema
Solutia genereaza obiecte costisitoare (timp creare si memorie
ocupata) cu durata de viata lunga
Pentru eficienta, Solutia reutilizeaza obiectul prin clonarea acestuia
(se creaza o instant noua a obiectului)
Implementat printr-o metoda clone()
acs.ase.ro
catalin.boja@ie.ase.ro
47
PROTOTYPE - Diagrama
http://en.wikipedia.org/wiki/Builder_pattern
acs.ase.ro
catalin.boja@ie.ase.ro
48
Structural Design-Patterns
Adapter, Facade, Decorator, Composite, Flyweight, Proxy
Modelul ADAPTER
(Wrapper)
Structural Design-Patterns
ADAPTER - Problema
Utilizarea mpreun a unor clase ce nu au
o interfa comuna
Clasele nu se modifica ns se
construiete o interfa ce permite
utilizarea lor in alt context
Clasele sunt adaptate la un nou context
Apelurile ctre interfaa clasei sunt
mascate de interfaa adaptorului
Transformarea datelor dintr-un format n
altul
acs.ase.ro
catalin.boja@ie.ase.ro
51
ADAPTER - Scenariu
Clase
exitente
Clase existente
Framework
client
Adaptor
Codul nu se schimb
acs.ase.ro
catalin.boja@ie.ase.ro
Framework
client
Codul nu se schimb
52
ADAPTER - Diagrama
acs.ase.ro
catalin.boja@ie.ase.ro
53
ADAPTER - Componente
ClasaExistenta
clasa existenta ce trebuie adaptata la o noua interfa;
ClasaContextNou
definete interfaa specific noului domeniu;
Adaptor
adapteaz interfaa clasei existente la cea a clasei din noul context;
contine (composition) o referinta catre clasa/obiectul ce trebuie adaptat
Client
Reprezint framework-ul care apeleaz interfaa specific noului domeniu
acs.ase.ro
catalin.boja@ie.ase.ro
54
catalin.boja@ie.ase.ro
55
ADAPTER Scenariu
ACME Inc. dorete s cumpere un nou framework pentru
serviciile din back-end. Interfaa pentru aceste servicii
gestioneaz datele prin intermediul obiectelor de tip ACME,
iar noul framework proceseaz datele prin intermediul
obiectelor de tip MICRO. Programatorii companiei trebuie
sa gseasc o soluie de a integra cele doua framework-uri
fr a le modifica.
acs.ase.ro
catalin.boja@ie.ase.ro
56
Modelul FAADE
(Wrapper)
Structural Design-Patterns
FAADE - Problema
Soluia conine o mulime de clase iar execuia
unei funcii presupune apeluri multiple de
metode aflate in aceste clase
Clasele nu se modifica ns se construiete un
layer intermediar ce permite apelul/gestiunea
facila a metodelor din mai multe interfee
Util in situaia in care framework-ul creste in
complexitate si nu este posibila rescrierea lui
pentru simplificare
Apelurile ctre multiplele interfee sunt
mascate de aceasta interfa comun
acs.ase.ro
catalin.boja@ie.ase.ro
58
FAADE - Scenariu
acs.ase.ro
catalin.boja@ie.ase.ro
59
FAADE - Diagrama
acs.ase.ro
catalin.boja@ie.ase.ro
60
FAADE - Componente
Clasa1, Clasa2, , Package1, Package2,
clase existente ce pun la dispoziie diferite interfee;
Facade
Definete o interfaa simplificata pentru contextul existent;
Client
Reprezint framework-ul care apeleaz interfaa specifica noului domeniu
acs.ase.ro
catalin.boja@ie.ase.ro
61
catalin.boja@ie.ase.ro
62
FAADE - Scenariu
ACME Inc. dezvolt o soluie software pentru managementul unei
locuine inteligente. Includerea n framework a tuturor
componentelor controlabile dintr-o astfel de locuin (ferestre,
nclzire, alarma, etc) a generat un numr mare de clase.
Departamentul care dezvolta interfaa Web a soluiei ofer un set
minim de funcii ce pot fi controlate de la distanta. Dei
funcionalitatea este simpla, numrul mare de clase ce se
instaniaz si a metodelor apelate ngreuneaz dezvoltarea si
testarea. In acest sens, o interfa mai simpla ar ajuta acest
departament.
acs.ase.ro
catalin.boja@ie.ase.ro
63
Modelul DECORATOR
(Wrapper)
Structural Design-Patterns
DECORATOR - Problema
Extinderea (decorarea) statica sau la run-time a
funcionalitii unor obiecte, independent de
alte instane ale aceleiai clase
Obiectul poate sa fie extins prin aplicarea mai
multor decoratori
Clasa existenta nu trebuie sa fie modificata
Utilizarea unei abordri tradiionale, prin
derivarea clasei, duce la ierarhii complexe ce
sunt greu de gestionat. Derivarea adaug
comportament nou doar la compilare
acs.ase.ro
catalin.boja@ie.ase.ro
65
DECORATOR - Diagrama
acs.ase.ro
catalin.boja@ie.ase.ro
66
DECORATOR - Componente
AbstractProduct
clasa abstracta ce definete interfaa obiectelor ce pot fi decorate cu noi funcii;
ConcreteProduct
definete obiecte ce pot fi decorate;
Decorator
gestioneaz o referina de tip AbstractProduct ctre obiectul decorat;
metodele motenite din AbstractProduct apeleaz implementrile specifice din clasa
obiectului referit;
Poate defini o interfa comun claselor decorator;
ConcreteDecorator
Adaug funcii noi obiectului referit;
acs.ase.ro
catalin.boja@ie.ase.ro
67
DECORATOR - Avantaje
Extinderea funcionalitii a unui obiect particular se face dinamic, la
run-time
Decorarea este transparenta pentru utilizator deoarece clasa
motenete interfaa specifica obiectului
Decorarea se face pe mai multe niveluri, ns transparent pentru
utilizator
Nu impune limite privind un numr maxim de decorri
acs.ase.ro
catalin.boja@ie.ase.ro
68
DECORATOR - Dezavantaje
Un decorator este un wrapper pentru obiectul iniial. El nu este
identic cu obiectul ncapsulat
Utilizarea excesiva genereaz o mulime de obiecte care arata la fel
dar care se comporta diferit > dificil de neles si verificat codul
Situaia trebuie analizata cu atenie deoarece in unele situaii patternul Strategy este mai indicat
acs.ase.ro
catalin.boja@ie.ase.ro
69
Modelul COMPOSITE
Structural Design-Patterns
COMPOSITE - Problema
Soluia conine o mulime de clase aflate in relaie ierarhic ce trebuie
tratate unitar
Se construiesc structuri arborescente n care nodurile intermediare i
cele frunz sunt tratate unitar
acs.ase.ro
catalin.boja@ie.ase.ro
71
COMPOSITE - Scenariu
Meniuri
Meniu
buturi
Meniu
aperitive
Non-alcoolice
Alcoolice
acs.ase.ro
Meniu
supe
Sup de roii
Sup
catalin.boja@ie.ase.ro
72
COMPOSITE - Diagrama
acs.ase.ro
catalin.boja@ie.ase.ro
73
COMPOSITE - Componente
Componenta
conine descrierea abstract a tuturor componentelor din ierarhie
Descrie interfaa obiectelor aflate in compoziie
NodFrunza
Reprezint nodurile frunza din compoziie
Implementeaz toate metodele
Composite
Reprezint o component compusa are noduri fiu
Implementeaz metode prin care sunt gestionate nodurile fiu
acs.ase.ro
catalin.boja@ie.ase.ro
74
COMPOSITE - Avantaje
Framework-ul nu se rescrie
Permite gestiunea facila a unor ierarhii de clase ce conin att
primitive cat si obiecte compuse
Codul devine mai simplu deoarece obiectele din ierarhie sunt tratate
unitar
Adugarea de noi componente care respecta interfaa comun nu
ridica probleme suplimentare
acs.ase.ro
catalin.boja@ie.ase.ro
75
COMPOSITE - Scenariu
ACME Inc. dezvolt o soluie software pentru managementul
resurselor umane dintr-o companie. Soluia trebuie s ofere un
mecanism unitar care s centralizeze angajaii companiei i care s
in cont de:
relaiile ierarhice
apartenena angajailor la un departament
rolurile diferite ale angajailor
setul comun de funcii pe care un angajat le poate ndeplini
acs.ase.ro
catalin.boja@ie.ase.ro
76
Modelul FLYWEIGHT
Modele structurale
FLYWEIGHT - Problema
Soluia genereaz o mulime de obiecte cu o
structura interna complexa si care ocupa un
volum mare de memorie
Obiectele au atribute comune ns o parte din
starea lor variaz; memoria ocupata de ele
poate fi minimizata prin partajarea strii fixe
intre ele
Starea obiectelor poate fi gestionat prin
structuri externe iar numrul de obiecte efectiv
create poate fi minimizat
Utilizarea unui obiect nseamn rencrcarea
strii lui variabile ntr-un obiect existent
acs.ase.ro
catalin.boja@ie.ase.ro
Attack of Clones
78
FLYWEIGHT - Scenariu
acs.ase.ro
catalin.boja@ie.ase.ro
79
FLYWEIGHT - Diagrama
acs.ase.ro
catalin.boja@ie.ase.ro
80
FLYWEIGHT - Componente
Flyweight
Interfa ce permite obiectelor s primeasc valori ce fac parte din starea lor si s
fac diferite procesri pe baza acesteia;
Flyweight Factory
Concrete Flyweight
Client
acs.ase.ro
catalin.boja@ie.ase.ro
81
catalin.boja@ie.ase.ro
82
acs.ase.ro
catalin.boja@ie.ase.ro
83
acs.ase.ro
catalin.boja@ie.ase.ro
84
Modelul PROXY
Structural Design-Patterns
PROXY - Problema
Interconectarea de API-uri diferite aflate pe aceeai main sau in
reea
Definirea unei interfee ntre framework-uri diferite
acs.ase.ro
catalin.boja@ie.ase.ro
86
PROXY - Diagrama
acs.ase.ro
catalin.boja@ie.ase.ro
87
PROXY - COMPONENTE
Subject
Definete interfaa obiectului real la care se face conectarea
Interfaa este implementata si de proxy astfel nct s se poat conecta la
obiecte
Proxy
Gestioneaz referina ctre obiectul real
Implementeaz interfaa obiectului real
Controleaz accesul la obiectul real
RealSubject
Obiectul real ctre care proxy-ul are legtura
acs.ase.ro
catalin.boja@ie.ase.ro
88
acs.ase.ro
catalin.boja@ie.ase.ro
89
abloane asemntoare
Adapter modific interfaa obiectului
Decorator adaug dinamic funcii noi la comportamentul
obiectului
Strategy (Behavioral) modific comportamentul obiectului
Faade asigura o interfa simplificat
Composite agreg mai multe obiecte asemntoare pentru
o gestiune unitar
acs.ase.ro
catalin.boja@ie.ase.ro
90
Behavioral Design-Patterns
Strategy, Observer, Chain of Responsability, Template, State, Command,
Iterator, Memento
Modelul STRATEGY
Modele comportamentale
STRATEGY - Problema
Alegerea la run-time a algoritmului/funciei
care sa fie utilizata pentru procesarea unor
date;
Algoritmul se poate alege pe baza unor
condiii descrise la execuie in funcie de
contextul datelor de intrare
Clasa existenta nu trebuie sa fie modificata
Utilizarea unei abordri tradiionale, prin
includerea in clasa a tuturor metodelor
posibile, duce la ierarhii complexe ce sunt greu
de gestionat. Derivarea adaug comportament
nou doar la compilare
STRATEGY - Diagrama
STRATEGY - Componente
IStrategy
clasa abstracta ce definete interfaa obiectelor ce pot oferi noi
funcii/algoritmi de prelucrare;
StrategyA
definete obiecte ce furnizeaz soluii pentru prelucrarea datelor;
Obiect
gestioneaz o referina de tip IStrategy ctre obiectul care va oferi
funcia/algoritmul;
Gestioneaz datele/contextual ce necesit prelucrare;
STRATEGY - Avantaje
Alegerea metodei de prelucrare a datelor se face dinamic, la run-time
Este permisa definirea de noi algoritmi independent de modificarea
clasei ce gestioneaza datele
Nu impune limite privind un numar maxim de functii/algoritmi ve pot
fi folositi
Modelul OBSERVER
Modele comportamentale
OBSERVER
http://umlcomics.blogspot.ro/2010/03/world-of-twisted-design-patterns.html
acs.ase.ro
catalin.boja@ie.ase.ro
98
OBSERVER - Problema
Exista componente care trebuie sa fie notificate la producerea unui
eveniment
Gestiunea evenimentelor la nivel de interfa
Componentele se aboneaz/nregistreaz la acel eveniment
modificare de stare/aciune
La producerea unui eveniment pot fi notificate mai multe
componente
OBSERVER - Avantaje
Externalizarea/delegarea funciilor ctre componente observator
care dau soluii la anumite evenimente independent de proprietarul
evenimentului
Conceptul integrat n pattern-ul arhitectural Model View Controller
(MVC)
Implementeaz conceptul POO de loose coupling obiectele sunt
interconectate prin notificri i nu prin instanieri de clase i apeluri
de metode
OBSERVER - Diagrama
OBSERVER - Componente
Observabil
clasa abstracta ce definete interfaa obiectelor gestioneaz evenimente si
care sunt observabile;
ObservabilConcret
definete obiecte ce permit abonarea unor observatori;
Observator
Interfa ce definete modalitatea in care sunt notificai observatorii;
Permite gestiunea mai multor observatori
ConcreteDecorator
Implementeaz funcii concrete care sunt executate in urma notificrii;
Modelul CHAIN OF
RESPONSABILITY
Modele comportamentale
acs.ase.ro
catalin.boja@ie.ase.ro
http://www.leahy.com.au/
105
HandlerA
definete obiecte concrete ce formeaz secvena de tratare a notificrii;
Client
Genereaz evenimentul sau notifica primul obiect din secvena de obiecte;
Modelul STATE
Modele comportamentale
STATE - Problema
Aplicaia trateaz un anumit eveniment diferit n
funcie de starea unui obiect
Numrul de stri posibile poate s creasc i
tratarea unitar a acestora poate s influeneze
complexitatea soluiei
Modul de tratare a aciunii este asociat unei
anumite stri i este ncapsulat ntr-un obiect de
stare
acs.ase.ro
catalin.boja@ie.ase.ro
109
STATE - Diagrama
http://en.wikipedia.org/wiki/State_pattern
STATE - Componente
Handler
clasa abstracta ce definete interfaa obiectelor ce gestioneaz cererea de
procesare a evenimentului;
HandlerA
definete obiecte concrete ce formeaz secvena de tratare a notificrii;
Client
Genereaz evenimentul sau notifica primul obiect din secvena de obiecte;
Modelul COMMAND
Modele comportamentale
COMMAND - Problema
Aplicaia definete aciuni parametrizabile ce pot fi
executate mai trziu fr a solicita clientului
cunoaterea detaliile interne necesare execuiei.
Pentru a nu bloca clientul, se dorete ca aceste aciuni
s fie definite i trimise spre execuie fr a mai fi
gestionate de client
Se decupleaz execuia ntrziat (ulterioara) a unei
aciuni de proprietar. Din punctul acestuia de vedere,
aciunea a fost deja trimisa spre execuie.
Concept echivalent cu macro-urile. Obiectul de tip
command ncapsuleaz toate informaiile necesare
execuiei aciunii mai trziu de ctre responsabil
Clientul este decuplat de cel ce executa aciunea
acs.ase.ro
catalin.boja@ie.ase.ro
113
COMMAND - Diagrama
http://www.oodesign.com/command-pattern.html
COMMAND - Componente
Command
ConcreteCommand
Client
Invoker
Receiver
COMMAND - Scenariu
ACME Inc. dezvolta o soluie software pentru un restaurant, astfel nct
chelnerul s poat prelua comenzile direct pe telefonul mobil.
Comenzile sunt preluate de la client i ele sunt create pe loc, fiind
automat alocat buctarul specializat pe acel fel de mncare,
ingredientele folosite si alte cerine speciale ale clientului. Aceste
detalii sunt puse de aplicaie, fr a fi necesara intervenia chelnerului
care doar selecteaz felul de mncare solicitat. Comenzile sunt trimise
buctarilor la finalizarea comenzii pentru masa respectiva, urmnd s
fie executate in funcie de gradul de ncrcare al fiecrui buctar.
acs.ase.ro
catalin.boja@ie.ase.ro
116
http://www.oodesign.com/template-method-pattern.html
TEMPLATE - Componente
Trip
Clasa abstracta ce definete interfaa unui obiect de tip Trip si modalitatea in
care sunt executate metodele
Conine o metod template ce implementeaz ablonul de execuie a interfeei
si care nu se supradefinete
PackageA
Definete interfaa obiectului ntr-o situaie concret
PackageB
Definete interfaa obiectului ntr-o situaie concret
acs.ase.ro
catalin.boja@ie.ase.ro
120
Modelul MEMENTO
Modele comportamentale
MEMENTO - Problema
Aplicaia trebuie sa permit salvarea strii unui
obiect
Imaginile strii obiectului pentru diferite
momente sunt gestionate separat
Obiectul i poate restaura starea pe baza unei
imagini anterioare
acs.ase.ro
catalin.boja@ie.ase.ro
122
MEMENTO - Diagrama
http://www.oodesign.com/memento-pattern.html
MEMENTO - Componente
Memento
Gestioneaz starea interna a obiectului Originator pentru un anumit moment;
Este creat de Originator si este gestionat de Caretaker
Originator
Obiectul a crui stare este urmrita; Poate genera un Memento cu starea lui la
momentul respective. Poate sa i reface starea pe baza unui Memento
Caretaker
Gestioneaz obiectele de tip Memento fr a avea acces pe coninutul
acestora;
Recapitulare
Creaionale:
Factory creeaz obiecte dintr-o familie
Builder creeaz obiecte setnd anumite atribute
Singleton creeaz o unic instan
Structurale:
acs.ase.ro
125
Recapitulare
Comportamentale:
Strategy schimba la run-time funcia executat
Observer execut o aciune cnd are loc un eveniment sau un observabil i
schimba starea
Chain of Responsibility gestioneaz o secven de aciuni ce pot procesa un
eveniment sau un obiect
Command gestioneaz realizarea ntrziat a unei aciuni
Memento gestioneaz strile anterioare ale unui obiect
State stabilete tipul aciunii n funcie de starea obiectului
Template gestioneaz un ablon fix de aciuni
acs.ase.ro
catalin.boja@ie.ase.ro
126