Download - Curs CTS Design Patterns v2
-
8/16/2019 Curs CTS Design Patterns v2
1/126
Design patterns
Conf. univ. dr. Cata
catalin.boja@ie
-
8/16/2019 Curs CTS Design Patterns v2
2/126
Calitate cod sursă
Principii urmărite în scrierea codului:• Ușor de citit/înțeles – clar
• Ușor de modificat – structurat
• Ușor de reutilizat
• Simplu (complexitate)
• Ușor de testat
• Implementează pattern-uri pentruproblem standard
Left: Simply Explained: Code
03.By Oliver Widder, Webcomacs.ase.ro [email protected]
http://geekandpoke.typepad.com/geekandpoke/2009/12/simply-explained.htmlhttp://geekandpoke.typepad.com/geekandpoke/2009/12/simply-explained.html
-
8/16/2019 Curs CTS Design Patterns v2
3/126
Calitate cod sursă
Forte care o influențează:• Timpul disponibil (termene de predare)
• Costuri
• Experiența programatorului
• Competențele programatorului
• Claritate specificații
• Complexitate soluție
• Rata schimbări in specificații, cerințe, echipa, etc
http://khrist
acs.ase.ro [email protected]
http://khristianmcfadyen.com/http://khristianmcfadyen.com/
-
8/16/2019 Curs CTS Design Patterns v2
4/126
Anti-Pattern: Big ball of mud
“A Big Ball of Mud is ahaphazardly structured,
sprawling, sloppy, duct-tape-and-baling-wire, spaghetti-
code jungle.”
Brian Foote and Joseph Yoder, Big Ball of Mud,September 1997
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
5/126
Anti-Pattern: Big ball of mud
De unde ? De ce ?• Throwaway code – solutii
temporare (Prototyping) ce trebuieinlocuite/rescrise
• Cut and Paste code -
• Adaptarea prin comentare/stergerea unor alte solutii
• Deadline-uri foarte scurte saunerealiste
• Lipsa de experienta
• Lipsa unor standard/proceduri
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
6/126
Anti-Pattern: Big ball of mud
Cum eviti ?• Rescrierea codului (Refactoring)
pana la un nivel acceptabil dematuritate
• Utilizare Principii Clean Code
• Implementare Design Patterns
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
7/126
Design-pattern
•
Un pattern reprezintă o soluțiereutilizabila pentru o problemastandard , intr-un anumit context
• Facilitează reutilizareaarhitecturilor si a design-uluisoftware
• NU sunt structuri de date
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
8/126
Design-pattern
“ A pattern involves a generaldescription of a recurring solutionto a recurring problem withvarious goals and constraints. It
identify more than a solution, italso explains why the solution is
needed .“ (James Coplien)
“... describes a problem woccurs over and over agaenvironment, and then dthe core of the solution t
problem, in such a way tcan use this solution a m
times over, without everthe same way twice” (CrAlexander)
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
9/126
Avantajele unui Design-Pattern
•
Permit reutilizarea solutiilor standard la nivel de cod sursa/a• Permit documentarea codului sursa/arhitecturilor
• Permit intelegerea mai facila a codului sursa/a arhitecturii
• Reprezinta concepte universal cunoscute - definesc un vocacomun
• Sunt solutii testate si foarte bine documentate
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
10/126
Design-Pattern in Arhitecturi Software
Enterprise• OO ArchitectureSystem
• SubsystemApplication
• FrameworksMacro
• Design-PatternsMicro
• OOPObjects
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
11/126
Componentele unui Design-Pattern
• Nume:• Face parte din vocabularul unui programator/designer/arhitect software• Identifica in mod unic pattern-ul
• Problema:• Descrie scopul urmărit• Definește contextul• Stabilește când este aplicabil pattern-ul
•Soluție
• Diagrama UML, pseudo-cod ce descrie elementele
• Consecințe• Rezultate• Avantaje si dezavantaje
Nume
Solutie
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
12/126
Istoric Design-Pattern
•
1970 – primele modele legate de conceptual de Window si (Smalltalk, Xerox Parc, Palo Alto)
• 1978 – MVC pattern (Goldberg and Reenskaug, Smalltalk, Xe
• 1987 - Kent Beck and Ward Cunningham, “Using Pattern Lanfor Object-Oriented Programs”, OOPSLA-87 Workshop
• 1991 - Erich Gamma, an idea for a Ph.D. thesis about patter• 1993 - E. Gamma, R. Helm, R. Johnson, J. Vlissides. Design P
Abstraction and Reuse of Object-Oriented Design. ECOOP 97707, Springer, 1993
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
13/126
Istoric Design-Pattern
Erich Gamma, Richard Helm,Ralph Johnson & John Vlissides(Addison-Wesley, 1995) - DesignPatterns
• The Gang of Four (GOF)
•
Cartea descrie 23 pattern-uri –probleme si soluții ce pot fiaplicate in numeroase scenarii
• Cea mai populara carte deComputer Software
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
14/126
Utilizare Design-Patterns
•
Observer in Java AWT si Swing pentru callback-uri• Iterator in C++ STL si Java Collections
• Façade in multe librarii Open-Source pentru a ascunde comrutinelor interne
• Bridge si Proxy in framework-uri pentru aplicatii distribuite
• Singleton in Hybernate si NHybernate
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
15/126
Tipuri de Design-Pattern
•
Creaționale• Inițializarea si configurarea claselor si obiectelor
• Structurale
• Compoziția claselor si obiectelor
• Decuplarea interfețelor si a claselor
•
Comportamentale• Distribuția responsabilității
• Interacțiunea intre clase si obiecte
Creaționale
Comportamen
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
16/126
Tipuri de Design-Pattern
Creaționale
• Factory Method
• Abstract Factory
• Builder
• Prototype• Singleton
Structurale
• Adapter
• Bridge
• Composite
• Decorator• Façade
• Flyweight
• Proxy
Comportame
• Interpreter
• Chain of Respons
• Command
• Iterator
• Mediator• Memento
• Observer
• State
• Strategy
• Visitor
• Template
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
17/126
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 comp
• Factory Method• Pattern ce defineste o metoda pentru crearea de obiecte din aceeasi fam
(interfata) in subclase
• Prototype• Pattern pentru clonarea unor noi instante (clone) ale unui prototip exist
• Singleton• Pattern pentru crearea unei singure instante (unica)
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
18/126
Structural Design-Patterns
• Adapter:
• Adaptează interfața 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 interfața unui modul/subsistem
• Flyweight:
• Partajare memorie intre obiecte similare.
• Proxy:
• Interfață către alte obiecte/resurse
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
19/126
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 [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
20/126
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 [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
21/126
Creational Design-Patte
Singleton, Abstract Factory, Factory Method, Factory, Builder, Prot
-
8/16/2019 Curs CTS Design Patterns v2
22/126
Creational Design-Patterns
Modelul SINGLETON
-
8/16/2019 Curs CTS Design Patterns v2
23/126
• Se dorește crearea unei singure instanțe pentru o clasă prfie gestionată o resursă/un eveniment în mod centralizat;
• Soluția se bazează pe existența unei singure instanțe ce pocreata o singură dată dar care poate fi referită de mai mul
• Asigură un singur punct de acces, vizibil global, la unica ins
•Exemple: gestiune conexiune baze de date sau alte resursemecanism de logging unic; manager evenimente; managevizuale; manager configurare.
SINGLETON- Problema
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
24/126
SINGLETON - Diagrama
public class Singleton {
private static Singleton instance =null;
private Singleton() { }
public static synchronized SingletongetInstance() {
if (instance == null) {instance = new Singleton ();
}
return instance;
}
}
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
25/126
• Singleton()
• un constructor privat (apelabil doar din clasa)
• private static Singleton instance• un atribut static, privat, de tipul clasei ce reprezinta instanta unica
• Singleton getInstance()
•
o metoda publica ce da acces la instanta unica• instanta unica este creata la primul apel al metodei
SINGLETON - Componente
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
26/126
Avantaje:
• Gestiune centralizata a unei resurse printr-o instanta unica
• Controlul strict al instantierii unei clase – o singura data
• Nu permite duplicarea instantelor
• Usor de implementat
Dezavantaje:
• In multi-threading pot aparea probleme de sincroniare sau coopsingleton-ul este partajat
• Poate deveni un bottleneck care sa afecteze performanta aplicat
SINGLETON – Avantaje si Dezavantaje
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
27/126
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 [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
28/126
Creational Design-Patterns
Modelul ABSTRACT FACT
-
8/16/2019 Curs CTS Design Patterns v2
29/126
• Se dorește implementarea unui mecanism prin care creare
obiectelor este transparenta pentru client• Solutia poate sa fie scalata prin adaugarea de noi tipuri co
obiecte fara a afecta codul scris
• Complexitatea crearii obiectelor este ascunsa clientului. Acum sa le creeze insa nu stie cum acestea sunt efectiv crea
• Crearea obiectelor este decuplata de solutie si generatoruinlocuit fara prea mare effort
• Obiectele sunt referite printr-o interfata comuna si nu direformeaza o familie de obiecte in jurul interfetei comune
ABSTRACT FACTORY- Problema
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
30/126
ABSTRACT FACTORY - Diagrama
acs.ase.ro [email protected]
http://en.wikipedia
http://en.wikipedia.org/wiki/Abstract_factory_patternhttp://en.wikipedia.org/wiki/Abstract_factory_patternhttp://en.wikipedia.org/wiki/Abstract_factory_pattern
-
8/16/2019 Curs CTS Design Patterns v2
31/126
• AbstractFactory
• interfata ce defineste metodele abstracte pentru crearea de instan
• AbstractProductA/AbstractProductB
• interfete ce definesc tipurile abstracte de obiecte ce pot fi create
• ConcreteFactory1/ConcreteFactory2
• clase concrete ce implementeaza interfata si metodele prin care sobiecte de tipul Product
• ProductA1, ProductA2, ProductB1…
• clase concrete ce defines diferitele tipuri de obiecte ce pot fi creat
ABSTRACT FACTORY - Componente
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
32/126
Avantaje:
• Decupleaza generatorul de instante de clientul care le utilizeaza• Controlul strict al instantierii – obiectele nu sunt create direct prin con
prin metodele de tip factory
• Diferitele tipuri de obiecte sunt gestionate unitar prin interfata comuntipuri pot fi adaugate fara modificari
• Usor de implementat
Dezavantaje:
• In multi-threading pot aparea probleme de sincroniare sau cooperaresingleton-ul este partajat
• Poate deveni un bottleneck care sa afecteze performanta aplicatiei
ABSTRACT FACTORY – Avantaje si Dezava
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
33/126
ABSTRACT FACTORY – Scenarii
• Gestiune creare produse catalog magazine virtual
• Gestiune creare tipuri diferite de client
• Gestiune creare tipuri diferite de rapoarte
• Gestiune creare tipuri de numere de telefon
• Gestiune creare tipuri de conturi bancare
• Gestiune creare tipuri de pizza
• Gestiune creare meniuri intr-un restaurant
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
34/126
Creational Design-Patterns
Modelul FACTORY METH
Virtual Constructor)
-
8/16/2019 Curs CTS Design Patterns v2
35/126
FACTORY METHOD - Diagrama
acs.ase.ro [email protected]
http://www.oodes
http://www.oodesign.com/factory-method-pattern.htmlhttp://www.oodesign.com/factory-method-pattern.htmlhttp://www.oodesign.com/factory-method-pattern.html
-
8/16/2019 Curs CTS Design Patterns v2
36/126
• Product
• interfata ce defineste tipurile generice de obiecte ce pot fi create
• 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
FACTORY METHOD - Componente
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
37/126
Avantaje:
• Toate obiecte create au in comun interfata• Controlul strict al instantierii – obiectele nu sunt create direct prin con
prin metoda de tip factory
• Diferitele tipuri de obiecte sunt gestionate unitar prin interfata comuntipuri, din aceeasi familie, pot fi adaugate fara modificari
• Usor de implementat
•
Pot fi generate obiecte noi care apartin aceleiasi familii (interfata com
Dezavantaje:
• Nu pot fi generate obiecte “noi”
• Constructorii sunt privati – clasele nu pot fi extinse
FACTORY METHOD – Avantaje si Dezavan
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
38/126
Creational Design-Patterns
Modelul FACTORY
-
8/16/2019 Curs CTS Design Patterns v2
39/126
FACTORY - Diagrama
acs.ase.ro [email protected]
http://www.oodes
http://www.oodesign.com/factory-method-pattern.htmlhttp://www.oodesign.com/factory-method-pattern.htmlhttp://www.oodesign.com/factory-method-pattern.html
-
8/16/2019 Curs CTS Design Patterns v2
40/126
Exemplu de SINGLETON si FACTORY
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
41/126
Creational Design-Patterns
Modelul BUILDER
Adaptive Builder)
-
8/16/2019 Curs CTS Design Patterns v2
42/126
• Soluția trebuie sa construiască obiecte complexe
printr-un mecanism care este independent deprocesul de realizare a obiectelor
• Clientul construiește obiectele complexespecificând doar tipul si valoarea sa, fără a cunoaștedetaliile interne ale obiectului (cum stochează sireprezintă valorile)
• Procesul de construire a obiectelor trebuie sa poatăfi utilizat pentru a defini obiecte diferite din aceeași
familie• Obiectele sunt gestionate prin interfața comuna
• Instanța de tip Builder construiește obiectul însătipul acestuia este definit de subclase
BUILDER - Problema
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
43/126
BUILDER- Diagrama
acs.ase.ro [email protected]
http://en.wikipedia
http://en.wikipedia.org/wiki/Builder_patternhttp://en.wikipedia.org/wiki/Builder_patternhttp://en.wikipedia.org/wiki/Builder_pattern
-
8/16/2019 Curs CTS Design Patterns v2
44/126
• Builder
• interfața abstracta ce definește metodele prin care sunt construiteobiectului complex
• ConcreteBuilder
• clasa concreta ce construiește părțile si pe baza lor obiectul final
• Product
• clasa abstracta ce definește obiectul complex ce este construit
• Director
• clasa concreta ce construiește obiectul complex utilizând interfațaBuilder
BUILDER - Componente
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
45/126
Avantaje:
• Obiectele complexe pot fi create independent de părțile carcompun (un obiect poate sa le conțină pe toate sau doar o p
• Sistemul permite reprezentarea diferita a obiectelor create interfață comună
•
Algoritmul de creare a obiectului este flexibil deoarece clience părți sa fie create
Dezavantaje:
• Atenție la crearea de obiecte – pot fi omise atribute
BUILDER - Avantaje si Dezavantaje
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
46/126
Creational Design-Patterns
Modelul PROTOTYPE
-
8/16/2019 Curs CTS Design Patterns v2
47/126
• Solutia genereaza obiecte costisitoare (timp creare si mem
ocupata) cu durata de viata lunga
• Pentru eficienta, Solutia reutilizeaza obiectul prin clonarea(se creaza o instant noua a obiectului)
• Implementat printr-o metoda clone()
PROTOTYPE - Problema
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
48/126
PROTOTYPE - Diagrama
acs.ase.ro [email protected]
http://en.wikipedia
http://en.wikipedia.org/wiki/Builder_patternhttp://en.wikipedia.org/wiki/Builder_patternhttp://en.wikipedia.org/wiki/Builder_pattern
-
8/16/2019 Curs CTS Design Patterns v2
49/126
Adapter, Facade, Decorator, Composite, Flyweight, Proxy
Structural Design-Patter
-
8/16/2019 Curs CTS Design Patterns v2
50/126
Structural Design-Patterns
Modelul ADAPTER
Wrapper)
ADAPTER P bl
-
8/16/2019 Curs CTS Design Patterns v2
51/126
• Utilizarea împreună a unor clase ce nu au
o interfață comuna• Clasele nu se modifica însă se
construiește o interfață ce permiteutilizarea lor in alt context
• Clasele sunt adaptate la un nou context
•
Apelurile către interfața clasei suntmascate de interfața adaptorului
• Transformarea datelor dintr-un format înaltul
ADAPTER - Problema
acs.ase.ro [email protected]
ADAPTER S i
-
8/16/2019 Curs CTS Design Patterns v2
52/126
Claseexitente
Frameworkclient
ADAPTER - Scenariu
Clase existente AdaptorFramework
client
Codul nu se schimbă Codul nu se schimbă
acs.ase.ro [email protected]
ADAPTER Di
-
8/16/2019 Curs CTS Design Patterns v2
53/126
ADAPTER - Diagrama
acs.ase.ro [email protected]
ADAPTER C t
-
8/16/2019 Curs CTS Design Patterns v2
54/126
• ClasaExistenta
• clasa existenta ce trebuie adaptata la o noua interfață;
• ClasaContextNou
• definește interfața specifică noului domeniu;
• Adaptor
• adaptează interfața clasei existente la cea a clasei din noul context
• contine (composition) o referinta catre clasa/obiectul ce trebuie a
• Client
• Reprezintă framework-ul care apelează interfața specifică noului d
ADAPTER - Componente
acs.ase.ro [email protected]
ADAPTER A antaje si De a antaje
-
8/16/2019 Curs CTS Design Patterns v2
55/126
Avantaje:
• Clasele existente (la client si la furnizor) nu sunt modificate putea fi folosite într-un alt context
• Se adaugă doar un layer intermediar
• Pot fi definite cu ușurință adaptoare pentru orice context
Dezavantaje:
Adaptorul de clase se bazează pe derivare multipla, lucru careposibil in Java. Alternativa este prin interfețe si compunere
ADAPTER – Avantaje si Dezavantaje
acs.ase.ro [email protected]
ADAPTER Scenariu
-
8/16/2019 Curs CTS Design Patterns v2
56/126
ADAPTER – Scenariu
ACME Inc. dorește să cumpere un nou framework p
serviciile din back-end. Interfața pentru aceste servgestionează datele prin intermediul obiectelor de tiar noul framework procesează datele prin intermeobiectelor de tip MICRO. Programatorii companiei sa găsească o soluție de a integra cele doua framew
fără a le modifica.
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
57/126
Structural Design-Patterns
Modelul FAÇADE
Wrapper)
FAÇADE Problema
-
8/16/2019 Curs CTS Design Patterns v2
58/126
• Soluția conține o mulțime de clase iar execuția
unei funcții presupune apeluri multiple demetode aflate in aceste clase
• Clasele nu se modifica însă se construiește unlayer intermediar ce permite apelul/gestiuneafacila a metodelor din mai multe interfețe
• Utilă in situația in care framework-ul creste in
complexitate si nu este posibila rescrierea luipentru simplificare
• Apelurile către multiplele interfețe suntmascate de aceasta interfață comună
FAÇADE - Problema
acs.ase.ro [email protected]
FAÇADE Scenariu
-
8/16/2019 Curs CTS Design Patterns v2
59/126
FAÇADE - Scenariu
acs.ase.ro [email protected]
FAÇADE Diagrama
-
8/16/2019 Curs CTS Design Patterns v2
60/126
FAÇADE - Diagrama
acs.ase.ro [email protected]
FAÇADE Componente
-
8/16/2019 Curs CTS Design Patterns v2
61/126
• Clasa1, Clasa2, …, Package1, Package2, …
• clase existente ce pun la dispoziție diferite interfețe;
• Facade
• Definește o interfața simplificata pentru contextul existent;
• Client
• Reprezintă framework-ul care apelează interfața specifica noului d
FAÇADE - Componente
acs.ase.ro [email protected]
FAÇADE - Avantaje si Dezavantaje
-
8/16/2019 Curs CTS Design Patterns v2
62/126
Avantaje:
•
Framework-ul nu se rescrie• Se adaugă doar un layer intermediar ce ascunde complexitatea frame
din spate
• Pot fi definite cu ușurință metode care sa simplifice orice situație
• Implementează principiul Least Knowledge – reducerea interacțiuniloobiect la nivel de “prieteni apropriați”
Dezavantaje:
• Creste numărul de clase wrapper
• Creste complexitatea codului prin ascunderea unor metode
• Impact negativ asupra performantei aplicației
FAÇADE - Avantaje si Dezavantaje
acs.ase.ro [email protected]
FAÇADE - Scenariu
-
8/16/2019 Curs CTS Design Patterns v2
63/126
FAÇADE Scenariu
ACME Inc. dezvoltă o soluție software pentru managemen
locuințe inteligente. Includerea în framework a tuturorcomponentelor controlabile dintr-o astfel de locuință (fere
încălzire, alarma, etc) a generat un număr mare de clase.Departamentul care dezvolta interfața Web a soluției oferăminim de funcții ce pot fi controlate de la distanta. Deșifuncționalitatea este simpla, numărul mare de clase ce se
instanțiază si a metodelor apelate îngreunează dezvoltareatestarea. In acest sens, o interfață mai simpla ar ajuta acesdepartament.
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
64/126
Structural Design-Patterns
Modelul DECORATOR
Wrapper)
DECORATOR - Problema
-
8/16/2019 Curs CTS Design Patterns v2
65/126
• Extinderea (decorarea) statica sau la run-time a
funcționalității unor obiecte, independent dealte instanțe ale aceleiași clase
• Obiectul poate sa fie extins prin aplicarea maimultor decoratori
• Clasa existenta nu trebuie sa fie modificata
• Utilizarea unei abordări tradiționale, prinderivarea clasei, duce la ierarhii complexe cesunt greu de gestionat. Derivarea adaugăcomportament nou doar la compilare
DECORATOR Problema
acs.ase.ro [email protected]
DECORATOR - Diagrama
-
8/16/2019 Curs CTS Design Patterns v2
66/126
DECORATOR Diagrama
acs.ase.ro [email protected]
DECORATOR - Componente
-
8/16/2019 Curs CTS Design Patterns v2
67/126
• AbstractProduct•
clasa abstracta ce definește interfața obiectelor ce pot fi decorate cu no• ConcreteProduct
• definește obiecte ce pot fi decorate;
• Decorator• gestionează o referința de tip AbstractProduct către obiectul decorat;
• metodele moștenite din AbstractProduct apelează implementările speci
obiectului referit;• Poate defini o interfață comună claselor decorator;
• ConcreteDecorator• Adaugă funcții noi obiectului referit;
DECORATOR Componente
acs.ase.ro [email protected]
DECORATOR - Avantaje
-
8/16/2019 Curs CTS Design Patterns v2
68/126
• Extinderea funcționalității a unui obiect particular se face di
run-time• Decorarea este transparenta pentru utilizator deoarece clas
moștenește interfața specifica obiectului
• Decorarea se face pe mai multe niveluri, însă transparent peutilizator
• Nu impune limite privind un număr maxim de decorări
DECORATOR Avantaje
acs.ase.ro [email protected]
DECORATOR - Dezavantaje
-
8/16/2019 Curs CTS Design Patterns v2
69/126
• Un decorator este un wrapper pentru obiectul inițial. El nu e
identic cu obiectul încapsulat• Utilizarea excesiva generează o mulțime de obiecte care ara
dar care se comporta diferit –> dificil de înțeles si verificat c
• Situația trebuie analizata cu atenție deoarece in unele situațul Strategy este mai indicat
DECORATOR Dezavantaje
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
70/126
Structural Design-Patterns
Modelul COMPOSITE
COMPOSITE - Problema
-
8/16/2019 Curs CTS Design Patterns v2
71/126
• Soluția conține o mulțime de clase aflate in relație ierarhică
tratate unitar• Se construiesc structuri arborescente în care nodurile interm
cele frunză sunt tratate unitar
acs.ase.ro [email protected]
COMPOSITE - Scenariu
-
8/16/2019 Curs CTS Design Patterns v2
72/126
Meniuri
Meniubăuturi
Non-alcoolice
Alcoolice
Meniuaperitive
Meniusupe
Supă de roșii
Supă
acs.ase.ro [email protected]
COMPOSITE - Diagrama
-
8/16/2019 Curs CTS Design Patterns v2
73/126
g
acs.ase.ro [email protected]
COMPOSITE - Componente
-
8/16/2019 Curs CTS Design Patterns v2
74/126
• Componenta
•
conține descrierea abstractă a tuturor componentelor din ierarhie• Descrie interfața obiectelor aflate in compoziție
• NodFrunza
• Reprezintă nodurile frunza din compoziție
• Implementează toate metodele
• Composite
• Reprezintă o componentă compusa – are noduri fiu
• Implementează metode prin care sunt gestionate nodurile fiu
p
acs.ase.ro [email protected]
COMPOSITE - Avantaje
-
8/16/2019 Curs CTS Design Patterns v2
75/126
• Framework-ul nu se rescrie
• Permite gestiunea facila a unor ierarhii de clase ce conțin atprimitive cat si obiecte compuse
• Codul devine mai simplu deoarece obiectele din ierarhie sununitar
• Adăugarea de noi componente care respecta interfața comu
ridica probleme suplimentare
j
acs.ase.ro [email protected]
COMPOSITE - Scenariu
-
8/16/2019 Curs CTS Design Patterns v2
76/126
ACME Inc. dezvoltă o soluție software pentru managemen
resurselor umane dintr-o companie. Soluția trebuie să ofemecanism unitar care să centralizeze angajații companiei șțină cont de:
• relațiile ierarhice
• apartenența angajaților la un departament
•
rolurile diferite ale angajaților• setul comun de funcții pe care un angajat le poate îndep
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
77/126
Modele structurale
Modelul FLYWEIGHT
FLYWEIGHT - Problema
-
8/16/2019 Curs CTS Design Patterns v2
78/126
• Soluția generează o mulțime de obiecte cu ostructura interna complexa si care ocupa unvolum mare de memorie
• Obiectele au atribute comune însă o parte dinstarea lor variază; memoria ocupata de elepoate fi minimizata prin partajarea stării fixeintre ele
• Starea obiectelor poate fi gestionat prinstructuri externe iar numărul de obiecte efectivcreate poate fi minimizat
• Utilizarea unui obiect înseamnă reîncărcareastării lui variabile într-un obiect existent
acs.ase.ro [email protected]
Attack
FLYWEIGHT - Scenariu
-
8/16/2019 Curs CTS Design Patterns v2
79/126
acs.ase.ro [email protected]
FLYWEIGHT - Diagrama
-
8/16/2019 Curs CTS Design Patterns v2
80/126
acs.ase.ro [email protected]
FLYWEIGHT - Componente
-
8/16/2019 Curs CTS Design Patterns v2
81/126
• Flyweight• Interfață ce permite obiectelor să primească valori ce fac parte din stare
facă diferite procesări pe baza acesteia;• Flyweight Factory
• Un pattern de tip factory ce construiește si gestionează obiecte de tip fly• Menține o colecție de obiecte diferite astfel încât ele sa fie create o sing
• Concrete Flyweight• Clasa implementează interfața de tip Flyweight si permite stocarea stări
(ce nu poate fi partajat) a obiectelor• Valori ce reprezintă o stare temporara partajata între obiecte sunt primit
procesate prin intermediul metodelor din interfață
• Client• Gestionează obiectele de tip flyweight si starea lor temporara
acs.ase.ro [email protected]
FLYWEIGHT - Avantaje si Dezavantaje
-
8/16/2019 Curs CTS Design Patterns v2
82/126
Avantaje:
• Se reduce memoria ocupata de obiecte prin partajarea lor intre a stării lor intre obiecte de același tip
• Pentru a gestiona corect partajarea obiectelor de tip Flyweight înși fire de execuție, acestea trebuie sa immutable
Dezavantaje:
• Trebuie analizate clasele si contextul pentru a se determina ce restare variabilă ce poate fi internalizată
• Efectele sunt vizibile pentru soluții in care numărul de obiecte es
• Nivelul de memorie redusa depinde de numărul de categorii de otip Flyweight
acs.ase.ro [email protected]
FLYWEIGHT – Scenariu problemă
-
8/16/2019 Curs CTS Design Patterns v2
83/126
ACME Inc. dezvolta un editor de texte ca soluție altern
soluțiile cunoscute. In faza de testare s-a observat ca pmăsura ce crește dimensiunea textului, crește și memocupată de această aplicația. Ritmul de creștere este uanormal, destul de rapid , iar in final generează întârzmomentul tastării unui caracter si cel al afișării. Teste
aceasta zona au arătat ca exista o legătura între număcaractere tastate si numărul de obiecte.
acs.ase.ro [email protected]
FLYWEIGHT - Șabloane asemănătoare
-
8/16/2019 Curs CTS Design Patterns v2
84/126
• Adapter – modifica interfața obiectului
• Decorator – adaugă dinamic funcții noi la comportamentul o
• Façade – asigura o interfață simplificata
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
85/126
Structural Design-Patterns
Modelul PROXY
PROXY - Problema
-
8/16/2019 Curs CTS Design Patterns v2
86/126
• Interconectarea de API-uri diferite aflate pe aceeași mașină
rețea• Definirea unei interfețe între framework-uri diferite
acs.ase.ro [email protected]
PROXY - Diagrama
-
8/16/2019 Curs CTS Design Patterns v2
87/126
acs.ase.ro [email protected]
PROXY - COMPONENTE
-
8/16/2019 Curs CTS Design Patterns v2
88/126
• Subject
•
Definește interfața obiectului real la care se face conectarea• Interfața este implementata si de proxy astfel încât să se poată con
obiecte
• Proxy
• Gestionează referința către obiectul real
• Implementează interfața obiectului real
• Controlează accesul la obiectul real
• RealSubject
• Obiectul real către care proxy-ul are legătura
acs.ase.ro [email protected]
PROXY - Tipuri de PROXY
-
8/16/2019 Curs CTS Design Patterns v2
89/126
• Virtual Proxies: gestionează crearea si inițializarea unor obiecostisitoare; acestea pot fi create doar atunci când e nevoiepartajează o singura instanță intre mai mulți client;
• Remote Proxies: asigura o instanță virtuala locala pentru unaflat la distanta – Java RMI.
• Protection Proxies: controlează accesul la metodele unui ob
anumite obiecte.• Smart References: gestionează referințele către un obiect
acs.ase.ro [email protected]
Șabloane asemănătoare
-
8/16/2019 Curs CTS Design Patterns v2
90/126
• Adapter – modifică interfața obiectului
• Decorator – adaugă dinamic funcții noi la comportamobiectului
• Strategy (Behavioral) – modifică comportamentul o
• Façade – asigura o interfață simplificată
• Composite – agregă mai multe obiecte asemănătoaro gestiune unitară
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
91/126
Strategy, Observer, Chain of Responsability, Template, State, Com
Iterator , Memento
Behavioral Design-Patte
-
8/16/2019 Curs CTS Design Patterns v2
92/126
Modele comportamentale
Modelul STRATEGY
STRATEGY - Problema
-
8/16/2019 Curs CTS Design Patterns v2
93/126
• Alegerea la run-time a algoritmului/funcțieicare sa fie utilizata pentru procesarea unor
date;• Algoritmul se poate alege pe baza unor
condiții descrise la execuție in funcție decontextul datelor de intrare
• Clasa existenta nu trebuie sa fie modificata
• Utilizarea unei abordări tradiționale, prinincluderea in clasa a tuturor metodelorposibile, duce la ierarhii complexe ce sunt greude gestionat. Derivarea adaugă comportamentnou doar la compilare
STRATEGY - Diagrama
-
8/16/2019 Curs CTS Design Patterns v2
94/126
STRATEGY - Componente
-
8/16/2019 Curs CTS Design Patterns v2
95/126
• IStrategy
• clasa abstracta ce definește interfața obiectelor ce pot oferi noifuncții/algoritmi de prelucrare;
• StrategyA
• definește obiecte ce furnizează soluții pentru prelucrarea datelor;
• Obiect
• gestionează o referința de tip IStrategy către obiectul care va oferfuncția/algoritmul;
• Gestionează datele/contextual ce necesită prelucrare;
STRATEGY - Avantaje
-
8/16/2019 Curs CTS Design Patterns v2
96/126
• Alegerea metodei de prelucrare a datelor se face dinamic, la
•
Este permisa definirea de noi algoritmi independent de modclasei ce gestioneaza datele
• Nu impune limite privind un numar maxim de functii/algoritfi folositi
-
8/16/2019 Curs CTS Design Patterns v2
97/126
Modele comportamentale
Modelul OBSERVER
OBSERVER
-
8/16/2019 Curs CTS Design Patterns v2
98/126
acs.ase.ro [email protected]
http://umlcomics.blogspot.ro/2010/03/world-of-twist
OBSERVER - Problema
http://umlcomics.blogspot.ro/2010/03/world-of-twisted-design-patterns.htmlhttp://umlcomics.blogspot.ro/2010/03/world-of-twisted-design-patterns.htmlhttp://umlcomics.blogspot.ro/2010/03/world-of-twisted-design-patterns.html
-
8/16/2019 Curs CTS Design Patterns v2
99/126
• Exista componente care trebuie sa fie notificate la producereveniment
• Gestiunea evenimentelor la nivel de interfață
• Componentele se abonează/înregistrează la acel evenimentmodificare de stare/acțiune
• La producerea unui eveniment pot fi notificate mai multe
componente
-
8/16/2019 Curs CTS Design Patterns v2
100/126
OBSERVER - Diagrama
-
8/16/2019 Curs CTS Design Patterns v2
101/126
OBSERVER - Componente
-
8/16/2019 Curs CTS Design Patterns v2
102/126
• Observabil
• clasa abstracta ce definește interfața obiectelor gestionează evenicare sunt observabile;
• ObservabilConcret
• definește obiecte ce permit abonarea unor observatori;
• Observator
• Interfață ce definește modalitatea in care sunt notificați observato
• Permite gestiunea mai multor observatori
• ConcreteDecorator
• Implementează funcții concrete care sunt executate in urma notifi
OBSERVER - Metode de comunicare
-
8/16/2019 Curs CTS Design Patterns v2
103/126
2 modele de notificare a observatorului la modificarea stării:
•
Push – obiectul trimite toate detaliile observatorului• Pull – obiectul doar notifică observatorul și acesta cere date
are nevoie de ele
-
8/16/2019 Curs CTS Design Patterns v2
104/126
Modele comportamentale
Modelul CHAIN OF
RESPONSABILITY
CHAIN OF RESPONSABILITY - Problema
-
8/16/2019 Curs CTS Design Patterns v2
105/126
• Tratarea unui eveniment sau a unui obiectse face diferit in funcție de starea acestuia
• Gestiunea tuturor cazurilor ar implica ostructură complexă care să verifice toatecazurile particulare
• Există legături de dependență între cazurilede utilizare: execuția unui caz poate implicaignorarea celorlalte sau tratareaurmătorului caz
acs.ase.ro [email protected]
http://www.leah
CHAIN OF RESPONSABILITY - Diagrama
http://www.leahy.com.au/http://www.leahy.com.au/
-
8/16/2019 Curs CTS Design Patterns v2
106/126
CHAIN OF RESPONSABILITY - Componen
-
8/16/2019 Curs CTS Design Patterns v2
107/126
• Handler
• clasa abstracta ce definește interfața obiectelor ce gestionează cer
procesare a evenimentului;
• HandlerA
• definește obiecte concrete ce formează secvența de tratare a notif
• Client
• Generează evenimentul sau notifica primul obiect din secvența de
-
8/16/2019 Curs CTS Design Patterns v2
108/126
Modele comportamentale
Modelul STATE
STATE - Problema
-
8/16/2019 Curs CTS Design Patterns v2
109/126
• Aplicația tratează un anumit eveniment diferit înfuncție de starea unui obiect
• Numărul de stări posibile poate să crească șitratarea unitară a acestora poate să influențezecomplexitatea soluției
• Modul de tratare a acțiunii este asociat uneianumite stări și este încapsulat într-un obiect destare
acs.ase.ro [email protected]
STATE - Diagrama
-
8/16/2019 Curs CTS Design Patterns v2
110/126
http://en.wikipedia.org/wiki/State_pattern
STATE - Componente
http://en.wikipedia.org/wiki/State_patternhttp://en.wikipedia.org/wiki/State_pattern
-
8/16/2019 Curs CTS Design Patterns v2
111/126
• Handler
• clasa abstracta ce definește interfața obiectelor ce gestionează cer
procesare a evenimentului;
• HandlerA
• definește obiecte concrete ce formează secvența de tratare a notif
• Client
• Generează evenimentul sau notifica primul obiect din secvența de
-
8/16/2019 Curs CTS Design Patterns v2
112/126
Modele comportamentale
Modelul COMMAND
COMMAND - Problema
• Aplicația definește acțiuni parametrizabile ce pot fi
-
8/16/2019 Curs CTS Design Patterns v2
113/126
• Aplicația definește acțiuni parametrizabile ce pot fiexecutate mai târziu fără a solicita clientuluicunoașterea detaliile interne necesare execuției.
• Pentru a nu bloca clientul, se dorește ca aceste acțiunisă fie definite și trimise spre execuție fără a mai figestionate de client
• Se decuplează execuția întârziată (ulterioara) a uneiacțiuni de proprietar. Din punctul acestuia de vedere,acțiunea a fost deja trimisa spre execuție.
• Concept echivalent cu macro-urile. Obiectul de tipcommand încapsulează toate informațiile necesareexecuției acțiunii mai târziu de către responsabil
• Clientul este decuplat de cel ce executa acțiunea
acs.ase.ro [email protected]
COMMAND - Diagrama
-
8/16/2019 Curs CTS Design Patterns v2
114/126
http://www.oodesign.com/command-pattern.html
http://www.oodesign.com/command-pattern.htmlhttp://www.oodesign.com/command-pattern.htmlhttp://www.oodesign.com/command-pattern.html
-
8/16/2019 Curs CTS Design Patterns v2
115/126
COMMAND - Scenariu
ACME I d lt l ți ft t t t
-
8/16/2019 Curs CTS Design Patterns v2
116/126
ACME Inc. dezvolta o soluție software pentru un restaurant, achelnerul să poată prelua comenzile direct pe telefonul mobil
Comenzile sunt preluate de la client și ele sunt create pe loc, automat alocat bucătarul specializat pe acel fel de mâncare,ingredientele folosite si alte cerințe speciale ale clientului. Acedetalii sunt puse de aplicație, fără a fi necesara intervenția chcare doar selectează felul de mâncare solicitat. Comenzile sun
bucătarilor la finalizarea comenzii pentru masa respectiva, urfie executate in funcție de gradul de încărcare al fiecărui bucă
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
117/126
Modele comportamentale
Modelul TEMPLATE METH
• Implementarea unui algoritm presupune o
TEMPLATE METHOD - Problema
-
8/16/2019 Curs CTS Design Patterns v2
118/126
• Implementarea unui algoritm presupune osecvență predefinita si fixa de pași
• Metoda ce definește schema algoritmului –metoda template
• Pot fi extinse/modificate metodele careimplementează fiecare pas însă schemaalgoritmului nu este modificabilă
• Implementează principiul Hollywood: "Don't call
us, we'll call you.“• Metodele concrete de definesc pașii algoritmului
sunt apelate de metoda template
TEMPLATE METHOD - Diagrama
-
8/16/2019 Curs CTS Design Patterns v2
119/126
http://www.oodesign.com/template-method-pattern.html
TEMPLATE - Componente
• Trip
http://www.oodesign.com/template-method-pattern.htmlhttp://www.oodesign.com/template-method-pattern.html
-
8/16/2019 Curs CTS Design Patterns v2
120/126
• Trip
• Clasa abstracta ce definește interfața unui obiect de tip Trip si mod
care sunt executate metodele• Conține o metod template ce implementează șablonul de execuție
si care nu se supradefinește
• PackageA
• Definește interfața obiectului într-o situație concretă
• PackageB• Definește interfața obiectului într-o situație concretă
acs.ase.ro [email protected]
-
8/16/2019 Curs CTS Design Patterns v2
121/126
Modele comportamentale
Modelul MEMENTO
MEMENTO - Problema
• Aplicația trebuie sa permită salvarea stării unui
-
8/16/2019 Curs CTS Design Patterns v2
122/126
Aplicația trebuie sa permită salvarea stării unuiobiect
• Imaginile stării obiectului pentru diferitemomente sunt gestionate separat
• Obiectul își poate restaura starea pe baza uneiimagini anterioare
acs.ase.ro [email protected]
MEMENTO - Diagrama
-
8/16/2019 Curs CTS Design Patterns v2
123/126
http://www.oodesign.com/memento-pattern.html
• Memento
MEMENTO - Componente
http://www.oodesign.com/memento-pattern.htmlhttp://www.oodesign.com/memento-pattern.htmlhttp://www.oodesign.com/memento-pattern.html
-
8/16/2019 Curs CTS Design Patterns v2
124/126
Memento
• Gestionează starea interna a obiectului Originator pentru un anum
Este creat de Originator si este gestionat de Caretaker
• Originator
• Obiectul a cărui stare este urmărita; Poate genera un Memento cumomentul respective. Poate sa își reface starea pe baza unui Mem
• Caretaker
• Gestionează obiectele de tip Memento fără a avea acces pe conținacestora;
-
8/16/2019 Curs CTS Design Patterns v2
125/126
Recapitulare
• Comportamentale:
-
8/16/2019 Curs CTS Design Patterns v2
126/126
Comportamentale:
• Strategy – schimba la run-time funcția executată
• Observer – execută o acțiune când are loc un eveniment sau un obschimba starea
• Chain of Responsibility – gestionează o secvență de acțiuni ce pot eveniment sau un obiect
• Command – gestionează realizarea întârziată a unei acțiuni
• Memento – gestionează stările anterioare ale unui obiect
• State – stabilește tipul acțiunii în funcție de starea obiectului
• Template – gestionează un șablon fix de acțiuni
acs.ase.ro [email protected]