Design pattern-urile sunt solutii pentru problemele de design care se intalnesc zi de zi in diferite aplicatii.
Acestea se impart in 3 mari cetgorii:
- Creational
| Abstract Factory | Creaza o instanta a mai multor familii de clase |
| Builder | Separa crearea obiectului de reprezentarea lui |
| Factory Method | Creaza o instanta a mai multor clase derivate |
| Prototype | O instanta initializata, copiata si clonata |
| Singleton | O clasa poate avea o singura instanta |
- Structural
| Adapter | Match-uieste interfate de la clase diferite |
| Bridge | Separa interfata unui obiect de implementare |
| Composite | O structura de tip “tree” a obiectele simnple si compuse |
| Decorator | Adauga responsabilitati obiectelor in mod dinamic |
| Facade | O singura clasa care reprezinta intrugul sistem |
| Flyweight | O instanta folosita pe sharing eficient |
| Proxy | Un obiect reprezinta un alt obiect |
- Behavioral
| Chain of Resp. | Un mod de a pasa un request intre un lant de obiecte |
| Command | Incapsuleaza un request ca un obiect |
| Interpreter | Un mod de a include elemente de limba intr un program |
| Iterator | Acceseaza secvential elementele unei colectii |
| Mediator | Defineste comunicarea simplificata intre clase |
| Memento | Captureaza si recupereaza starea interna a unui obiect |
| Observer | Un mod de a notifica schimbarea la un numar de clase |
| State | Altereaza comportamentul unui obiect cand starea lui se schimba |
| Strategy | Incapsuleaza un algoritm in interiorul unei clase |
| Template Method | Amana pasii exacti ai unui algoritm la o subclasa |
| Visitor | Defineste o operatie noua a unei clase fara schimbari |
1. Abstract Factory
Definitie= ofera o interfata pentru crearea famililor de obiecte ( dependente sau care au legatura unul cu celalalt) fara a specifica clasele lor concrete.
Diagrama

Participanti
- AbstractFactory: declara o interfata pentru operatiile care creaza abstract products
- ConcreteFactory: implementeaza operatiile pentru a crea product objects
- AbstractProduct: declara o interfata pt un type of product object
- Product: defineste un product object si implementeaza AbstractProduct interface
- Client: foloseste cele 2 interfete