Вы находитесь на странице: 1из 126

Design patterns

Conf. univ. dr. Catalin Boja


catalin.boja@ie.ase.ro

Calitate cod surs


Principii urmrite n scrierea codului:
Uor de citit/neles clar
Uor de modificat structurat
Uor de reutilizat
Simplu (complexitate)
Uor de testat
Implementeaz pattern-uri pentru
problem standard
acs.ase.ro

catalin.boja@ie.ase.ro

Left: Simply Explained: Code Reuse 2009-1203.By Oliver Widder, Webcomics Geek Aad Poke.
2

Calitate cod surs


Forte care o influeneaz:
Timpul disponibil (termene de predare)
Costuri
Experiena programatorului
Competenele programatorului
Claritate specificaii
Complexitate soluie
Rata schimbri in specificaii, cerine, echipa, etc
http://khristianmcfadyen.com/

acs.ase.ro

catalin.boja@ie.ase.ro

Anti-Pattern: Big ball of mud


A Big Ball of Mud is a
haphazardly structured,
sprawling, sloppy, duct-tapeand-baling-wire, spaghetticode jungle.
Brian Foote and Joseph Yoder, Big Ball of Mud,
September 1997

acs.ase.ro

catalin.boja@ie.ase.ro

Anti-Pattern: Big ball of mud


De unde ? De ce ?
Throwaway code solutii
temporare (Prototyping) ce trebuie
inlocuite/rescrise
Cut and Paste code -
Adaptarea prin comentare/stergere
a unor alte solutii
Deadline-uri foarte scurte sau
nerealiste
Lipsa de experienta
Lipsa unor standard/proceduri
acs.ase.ro

catalin.boja@ie.ase.ro

Anti-Pattern: Big ball of mud


Cum eviti ?
Rescrierea codului (Refactoring)
pana la un nivel acceptabil de
maturitate
Utilizare Principii Clean Code
Implementare Design Patterns

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

... describes a problem which


occurs over and over again in our
environment, and then describes
the core of the solution to that
problem, in such a way that you
can use this solution a million
times over, without ever doing it
the same way twice (Cristopher
Alexander)

catalin.boja@ie.ase.ro

Avantajele unui Design-Pattern


Permit reutilizarea solutiilor standard la nivel de cod sursa/arhitectura
Permit documentarea codului sursa/arhitecturilor
Permit intelegerea mai facila a codului sursa/a arhitecturii
Reprezinta concepte universal cunoscute - definesc un vocabular
comun
Sunt solutii testate si foarte bine documentate

acs.ase.ro

catalin.boja@ie.ase.ro

Design-Pattern in Arhitecturi Software


Enterprise

System
Application

Subsystem

Macro

Frameworks

Micro

Design-Patterns

Objects
acs.ase.ro

OO Architecture

OOP
catalin.boja@ie.ase.ro

10

Componentele unui Design-Pattern


Nume:

Face parte din vocabularul unui programator/designer/arhitect software


Identifica in mod unic pattern-ul

Problema:

Descrie scopul urmrit


Definete contextul
Stabilete cnd este aplicabil pattern-ul

Nume

Problema

Solutie

Consecinte

Soluie

Diagrama UML, pseudo-cod ce descrie elementele

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) {

instance = new Singleton ();


}
return instance;

}
}
acs.ase.ro

catalin.boja@ie.ase.ro

24

SINGLETON - Componente
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

acs.ase.ro

catalin.boja@ie.ase.ro

25

SINGLETON Avantaje si Dezavantaje


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 cooperare daca
singleton-ul este partajat
Poate deveni un bottleneck care sa afecteze performanta aplicatiei
acs.ase.ro

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

Modelul ABSTRACT FACTORY


Creational Design-Patterns

ABSTRACT FACTORY- Problema


Se dorete implementarea unui mecanism prin care crearea
obiectelor este transparenta pentru client
Solutia poate sa fie scalata prin adaugarea de noi tipuri concrete de
obiecte fara a afecta codul scris
Complexitatea crearii obiectelor este ascunsa clientului. Acesta stie
cum sa le creeze insa nu stie cum acestea sunt efectiv create
Crearea obiectelor este decuplata de solutie si generatorul poate fi
inlocuit fara prea mare effort
Obiectele sunt referite printr-o interfata comuna si nu direct. Ele
formeaza o familie de obiecte in jurul interfetei comune
acs.ase.ro

catalin.boja@ie.ase.ro

29

ABSTRACT FACTORY - Diagrama

http://en.wikipedia.org/wiki/Abstract_factory_pattern

acs.ase.ro

catalin.boja@ie.ase.ro

30

ABSTRACT FACTORY - Componente


AbstractFactory
interfata ce defineste metodele abstracte pentru crearea de instante

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

ProductA1, ProductA2, ProductB1


clase concrete ce defines diferitele tipuri de obiecte ce pot fi create

acs.ase.ro

catalin.boja@ie.ase.ro

31

ABSTRACT FACTORY Avantaje si Dezavantaje


Avantaje:
Decupleaza generatorul de instante de clientul care le utilizeaza
Controlul strict al instantierii obiectele nu sunt create direct prin constructori ci
prin metodele de tip factory
Diferitele tipuri de obiecte sunt gestionate unitar prin interfata comuna noi
tipuri pot fi adaugate fara modificari
Usor de implementat
Dezavantaje:
In multi-threading pot aparea probleme de sincroniare sau cooperare daca
singleton-ul este partajat
Poate deveni un bottleneck care sa afecteze performanta aplicatiei
acs.ase.ro

catalin.boja@ie.ase.ro

32

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

catalin.boja@ie.ase.ro

33

Modelul FACTORY METHOD


(Virtual Constructor)
Creational Design-Patterns

FACTORY METHOD - Diagrama

http://www.oodesign.com/factory-method-pattern.html

acs.ase.ro

catalin.boja@ie.ase.ro

35

FACTORY METHOD - Componente


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

acs.ase.ro

catalin.boja@ie.ase.ro

36

FACTORY METHOD Avantaje si Dezavantaje


Avantaje:
Toate obiecte create au in comun interfata
Controlul strict al instantierii obiectele nu sunt create direct prin constructori ci
prin metoda de tip factory
Diferitele tipuri de obiecte sunt gestionate unitar prin interfata comuna noi
tipuri, din aceeasi familie, pot fi adaugate fara modificari
Usor de implementat
Pot fi generate obiecte noi care apartin aceleiasi familii (interfata comuna).
Dezavantaje:
Nu pot fi generate obiecte noi
Constructorii sunt privati clasele nu pot fi extinse
acs.ase.ro

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

Exemplu de SINGLETON si FACTORY

acs.ase.ro

catalin.boja@ie.ase.ro

40

Modelul BUILDER
(Adaptive Builder)
Creational Design-Patterns

BUILDER - Problema

Soluia trebuie sa construiasc obiecte complexe


printr-un mecanism care este independent de
procesul de realizare a obiectelor
Clientul construiete obiectele complexe
specificnd doar tipul si valoarea sa, fr a cunoate
detaliile interne ale obiectului (cum stocheaz si
reprezint valorile)
Procesul de construire a obiectelor trebuie sa poat
fi utilizat pentru a defini obiecte diferite din aceeai
familie
Obiectele sunt gestionate prin interfaa comuna
Instana de tip Builder construiete obiectul ns
tipul acestuia este definit de subclase

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

BUILDER - Avantaje si Dezavantaje


Avantaje:
Obiectele complexe pot fi create independent de prile care l
compun (un obiect poate sa le conin pe toate sau doar o parte)
Sistemul permite reprezentarea diferita a obiectelor create printr-o
interfa comun
Algoritmul de creare a obiectului este flexibil deoarece clientul alege
ce pri sa fie create
Dezavantaje:
Atenie la crearea de obiecte pot fi omise atribute
acs.ase.ro

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

ADAPTER Avantaje si Dezavantaje


Avantaje:
Clasele existente (la client si la furnizor) nu sunt modificate pentru a
putea fi folosite ntr-un alt context
Se adaug doar un layer intermediar
Pot fi definite cu uurin adaptoare pentru orice context
Dezavantaje:
Adaptorul de clase se bazeaz pe derivare multipla, lucru care nu este
posibil in Java. Alternativa este prin interfee si compunere
acs.ase.ro

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

FAADE - Avantaje si Dezavantaje


Avantaje:
Framework-ul nu se rescrie
Se adaug doar un layer intermediar ce ascunde complexitatea framework-ului
din spate
Pot fi definite cu uurin metode care sa simplifice orice situaie
Implementeaz principiul Least Knowledge reducerea interaciunilor intre
obiect la nivel de prieteni apropriai
Dezavantaje:
Creste numrul de clase wrapper
Creste complexitatea codului prin ascunderea unor metode
Impact negativ asupra performantei aplicaiei
acs.ase.ro

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

Un pattern de tip factory ce construiete si gestioneaz obiecte de tip flyweight;


Menine o colecie de obiecte diferite astfel nct ele sa fie create o singur dat

Concrete Flyweight

Clasa implementeaz interfaa de tip Flyweight si permite stocarea strii permanente


(ce nu poate fi partajat) a obiectelor
Valori ce reprezint o stare temporara partajata ntre obiecte sunt primite si
procesate prin intermediul metodelor din interfa

Client

Gestioneaz obiectele de tip flyweight si starea lor temporara

acs.ase.ro

catalin.boja@ie.ase.ro

81

FLYWEIGHT - Avantaje si Dezavantaje


Avantaje:
Se reduce memoria ocupata de obiecte prin partajarea lor intre clieni sau
a strii lor intre obiecte de acelai tip
Pentru a gestiona corect partajarea obiectelor de tip Flyweight ntre clieni
i fire de execuie, acestea trebuie sa immutable
Dezavantaje:
Trebuie analizate clasele si contextul pentru a se determina ce reprezint
stare variabil ce poate fi internalizat
Efectele sunt vizibile pentru soluii in care numrul de obiecte este mare
Nivelul de memorie redusa depinde de numrul de categorii de obiecte de
tip Flyweight
acs.ase.ro

catalin.boja@ie.ase.ro

82

FLYWEIGHT Scenariu problem


ACME Inc. dezvolta un editor de texte ca soluie alternativa la
soluiile cunoscute. In faza de testare s-a observat ca pe
msura ce crete dimensiunea textului, crete i memoria
ocupat de aceast aplicaia. Ritmul de cretere este unul
anormal, destul de rapid , iar in final genereaz ntrzieri ntre
momentul tastrii unui caracter si cel al afirii. Teste pe
aceasta zona au artat ca exista o legtura ntre numrul de
caractere tastate si numrul de obiecte.

acs.ase.ro

catalin.boja@ie.ase.ro

83

FLYWEIGHT - abloane asemntoare


Adapter modifica interfaa obiectului
Decorator adaug dinamic funcii noi la comportamentul obiectului
Faade asigura o interfa simplificata

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

PROXY - Tipuri de PROXY


Virtual Proxies: gestioneaz crearea si iniializarea unor obiecte
costisitoare; acestea pot fi create doar atunci cnd e nevoie sau
partajeaz o singura instan intre mai muli client;
Remote Proxies: asigura o instan virtuala locala pentru un obiect
aflat la distanta Java RMI.
Protection Proxies: controleaz accesul la metodele unui obiect sau la
anumite obiecte.
Smart References: gestioneaz referinele ctre un obiect

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;

OBSERVER - Metode de comunicare


2 modele de notificare a observatorului la modificarea strii:
Push obiectul trimite toate detaliile observatorului
Pull obiectul doar notific observatorul i acesta cere datele cnd
are nevoie de ele

Modelul CHAIN OF
RESPONSABILITY
Modele comportamentale

CHAIN OF RESPONSABILITY - Problema


Tratarea unui eveniment sau a unui obiect
se face diferit in funcie de starea acestuia
Gestiunea tuturor cazurilor ar implica o
structur complex care s verifice toate
cazurile particulare
Exist legturi de dependen ntre cazurile
de utilizare: execuia unui caz poate implica
ignorarea celorlalte sau tratarea
urmtorului caz

acs.ase.ro

catalin.boja@ie.ase.ro

http://www.leahy.com.au/

105

CHAIN OF RESPONSABILITY - Diagrama

CHAIN OF RESPONSABILITY - 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 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

Definete interfaa necesar execuiei aciunii + alte detalii;

ConcreteCommand

Extinde interfaa comenzii si implementeaz metoda prin care este controlat


Receiver-ul
Reprezint legtura dintre Receiver si aciune

Client

Creeaz un obiect ConcreteCommand si seteaz Receiver-ul acestuia;

Invoker

Creeaz comanda i cere ndeplinirea aciunii;

Receiver

Obiectul care este responsabil cu execuia aciunii;

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

Modelul TEMPLATE METHOD


Modele comportamentale

TEMPLATE METHOD - Problema


Implementarea unui algoritm presupune o
secven predefinita si fixa de pai
Metoda ce definete schema algoritmului
metoda template
Pot fi extinse/modificate metodele care
implementeaz fiecare pas ns schema
algoritmului nu este modificabil
Implementeaz principiul Hollywood: "Don't call
us, we'll call you.
Metodele concrete de definesc paii algoritmului
sunt apelate de metoda template

TEMPLATE METHOD - Diagrama

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

Adapter adapteaz un API (o interfa) la altul


Composite gestioneaz o ierarhie de obiecte
Decorator atribuie la run-time funcionalitate nou unui obiect existent
Faade simplifica execuia (apelarea) unui scenariu complex
Flyweight gestioneaz eficient mai multe instane (clone) ale unui set redus
de modele
catalin.boja@ie.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

Вам также может понравиться