Sunteți pe pagina 1din 9

Abstract Factory / Fabrică abstractă

Scop: Oferă o interfaŃă pentru crearea unei familii de obiecte corelate, fără a specifica explicit clasele
acestora.

• MotivaŃie: look-and-feel (pe tablă)

• Aplicabilitate – Sistemul trebuie să fie independent de cum produsele cu care lucrează sunt create –
Sistemul este configurat să lucreze cu mai multe familii de produse – O familie de produse sunt
proiectate să funcŃioneze doar împreună

 AbstractFactory (AtelierAbstract) (WidgetFactory)


- Declara o interfata pentru operatii care creeaza obiecte produs abstracte
 ConcreteFactory (AtelierConcret) (MotifWidgetFactory, PMWidgetFactory)
- Implementeaza operatiile pentru crearea obiectelor produs concrete
 ProdusAbstract (Windows, ScrollBar)
- Declara o interfata pentru un tip de obiect produs
 ProdusConcret (MotifWindow, MotifScrollBar)
- Defineste un obiect produs care va fi creat de atelierul concret correspondent
- Implementeaza interfata ProdusAbstract
Builder
Scop: Separă construirea unui obiect complex de reprezentarea sa, astfel ca procesul de construire să
poată crea diferite reprezentări.

• MotivaŃie: (pagina următoare)

• Aplicabilitate – Algoritmul de creare a unui obiect complex este independent de părŃile care compun
efectiv obiectul – Sistemul trebuie să permită diferite reprezentări pentru obiectele care sunt construite.

Participanti
 Builder (TextConverter)
- Precizeaza o interfata abstracta pentru crearea partilor unui obiect produs
 ConcreteBuilder (ASCIIConverter, TeXConverter, TextWidgetConverter)
- Construieste si asambleaza parti ale produsului implementand interfata Builder
(Constructor)
 Director (RTFReader)
- Construieste un obiect utilizand interfata Builder
 Produs (ASCIIText, TeXText, TextWidget)
- Reprezinta obiectul complex in constructive. Clasa ConcreteBuilder construieste
reprezentarea interna a produsului si defineste procesul prin care acesta este
asamblat
- Contine clase care definesc partile constituitive, inclusive interfete pentru
asamblarea acestora in rezultatul final
Factory Method

• Aplicabilitate – Când o clasă nu poate anticipa tipul obiectelor care trebuie să le creeze – Când o clasă
vrea ca subclasele să specifice tipul obiectelor de creat

 O clasa nu poate anticipa clasa obiectelor pe care trebuie sa le creeze


 O clasa doreste ca subclasele sale sa precizeze obiectele pe care le creeaza
 Clasele deleaga responsabilitatea catre una dintre mai multe subclase ajutatoare si doriti
sa localizati cunoasterea subclasei ajutatoare delegate

Participanti
 Product (Document)
- Defineste interfata pentru obiectele create de metoda de atelier
 ConcreteProduct (MyDocument)
- Implementeaza interfata Product
 Ceator (Application)
- Declara metoda de atelier, care returneaza un obiect de tipul Product. De
asemenea, clasa Creator poate define o implementare prestabilita a metodei de
atelier, care sa returneze un obiect Concrete Product implicit
- Poate apela metoda de atelier pentru a crea un obiect Produt
 ConcreteCreator (MyApplication)
- Redefineste metoda de atelier astfel incat sa returneze o instant a unui obiect
ConcreteProduct

Consecinte
Metodele de atelier elimina necesitatea de a lega in cod clasele specific aplicatiei. Codul
are de a face doar cu interfata Productl prin urmare, el va putea lucre cu orice clase
ConcreteProduct definite de utilizator.

1. Furnizeaza puncte de acorare pentru subclase. Crearea obiectelor in interiorul unei


clase cu ajutorul unei metode de atelier este intotdeauna o modalitate mai flexibila decat
crearea directa a unui obiect.
2. Conecteaza ierarhii paralele de clasa. In exemplele despre care am discutat pana acum,
metoda de atelier nu este apelata decat de clasele Creators. Sa consideram cazul
figurilor desenate care pot fi manevrate interactive.
Prototype / Prototip
• Scop. Specifică ce obiecte trebuie create folosind o instanŃă pe post de prototip. Noile obiecte sunt
create prin copierea acestui prototip.

• Aplicabilitate – Sistem independent de cum sunt create produsele şi – Una dintre următoarele •
Clasele de instanŃiat sunt specificate în momentul rulării • Se doreşte evitarea creării unei ierarhii de
fabrici • Este mai convenabil să copiez o instanŃă existentă decât să creez una nouă.
Singleton / Unicat
• Scop: Garantarea existenŃei unei singure instanŃe a unei clase. Se asigură o modalitate de a accesa
instanŃa respectivă.

• MotivaŃie – Un singur spooler – Un singur sistem de fişiere – Un singur gestionar de ferestre •

Aplicabilitate – InstanŃa unică a unei clase trebuie să fie accesibilă clienŃilor întrun punct cunoscut –
InstanŃa unică trebuie să fie extensibilă; clienŃii nu trebuie să îşi modifice codul
Adapter
Scop – converteşte interfaŃa unei clase la interfaŃa pe care clienŃii acesteia o aşteaptă. – permite inter-
operabilitatea claselor care altfel nu ar fi compatibile •

MotivaŃie – O clasă dintr-o bibliotecă, proiectată să fie reutilizabilă, nu este reutilizabilă din simplul
motiv că interfaŃa acesteia nu se potriveşte cu una specifică domeniului în care se doreşte utilizată. •

Aplicabilitate – Se doreşte utilizarea unei clase cu o interfaŃă incompatibilă – Se doreşte crearea unei
clase reutilizabile ce colaborează cu clase neprevăzute – (adaptor de obiecte) Se doreşte folosirea a
câtorva subclase, dar adaptarea prin derivare este nepractică.

Structura
O clasa adaptor utilizeaza mostenirea multipla pentu a adapta o interfata la alta:

Un adaptor se bazeaza pe compunerea obiectelor:

Participanti
- Tinta (Shape): defineste interfata specifica domeniului, utilizata de catre client.
- Client (DrawingEditor): colaboreaza cu obiectele in conformitate cu intefata Tinta
- Adaptat (TextView): defineste o interfata existenta care trebuie adaptata.
- Adaptor (TextShape): adapteaza interfata Adaptat la interfata Tinta
Bridge
Scop – Decuplarea unei abstracŃiuni de implementarea sa astfel încât cele două să poată varia
independent

MotivaŃie – Când o abtracŃiune are câteva implementări posibile, se foloseşte de obicei moştenirea –
Folosirea moştenirii în această situaŃie duce la cod greu de modificat şi de extins. – Punerea
abstracŃiunilor şi a implementărilor în ierarhii diferite duce la crearea de cod mai uşor de întreŃinut

Aplicabilitate
Sablonul Bridge se utilizeaza cand:
- dorim sa evitam o legatura permanenta intreo abstractizare si implementarea
acesteia. Astfel de cazuri ar putea fi, de exemplu, cand implementarea trebuie
selectata sau schimbata a executie.
- atat abstractizarile, cat si implementarile acestora trebuie sa fie extensibile prin
generarea subclaselor. In acest caz, sablonul Bridge, permite sa combinam
abstractizari si implementari diferite si sa le extindem imediat.
- modificarile in implementarea unei abstractizari nu trebuie sa afecteze clientii; cu
alte cuvinte, codul client nu trebuie sa fie recompilat.

Participanti
- Abstraction (Window): defineste interfata abstractizarii, pastreaza o referinta
catre un obiect de tipul Implementor.
- RefinedAbstraction (IconWindow): extinde interfata definita de clasa Astraction.
- Implementor (WindowImp) defineste interfata pentru clasele de implementare.
- ConcreteImplementor (XWindowImp, PMWindowImp): implementeaza interfata
Implementor si ii defineste implementarea concreta.
Composite
Compune un obiect in structuri de arbore pentru a reprezenta ierarhii de tip
parte-intreg. Sablonul Composite permite clientilor sa trateze uniform obiectele si
compuneri de obiecte.

Aplicabilitate
Sablonul Composite se utilizeaza cand:
- dorim sa reprezentam ierarhii de obiecte, de tip parte-intreg.
- dorim ca clientii sa poata ignora diferentele dintre compunerile de obiecte
individuale. Clientii cor trata uniform toate obiectele din structura compusa.

Structura

O structura de tip obiect Composite ar putea arata astfel:

Participanti
- Component (Graphic): declara interfata pentru obiectele din compunere;
implementeaza in mod corespunzator, comportarea prestabilita pentru interfata
comuna tuturor claselor; declara o interfata pentru accesarea si gestionarea
componentelor sale copil.
- Leaf (Rectangle,Line,Text etc.) : reprezinta obiectele frunza din compunere;
defineste compunerea pentru obiecele primitive din compunere.
- Composite (Picture): defineste comportarea pentru componentele care au copii;
stocheaza componentele copil.
- Client: manevreaza obiectele din compunere prin intermediul interfetei
Component.
Decorator
Ataseaza dinamic responsabilitati suplimentare la un obiect. Decoratorii ofera
alternatica flexibila la generarea subclaselor in scopul extinderii functionalitatii.

Aplicabilitate
Utilizati sablonul Decorator:
- pentru a adauga dinamic si transparent responsabilitati la obiecte individuale,
adica fara a afecta alte obiecte.
- pentru responsabilitati care pot fi retrase.
- cand nu este practica extinderea prin generarea de subclase. Uneori, esteposibil
un numar mare de extinderi independente care vor produce o explozie de
subclase ce suporta fiecare combinatie. Sau definitia unei clase ar putea fi
ascunsa sau indisponibila pentru generarea de subclase.

Structura

Participanti
- Component (VisualComponent): defineste interfata pentru obiectele la care se
poate adauga dinamic responsabilitati.
- ConcreteComponent (TextView): defineste un obiect la care pot fi atasate
responsabilitati suplimentare.
- Decorator: pastreaza o referinta catre un obiect component si defineste o
interfata care se conformeaza interfetei obiectului Component.
- ConcreteDecorator (BorderDecorator,ScrollDecorator): adauga responsabilitati
la componenta.

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