I Design Pattern sono soluzioni essenziali per problemi ricorrenti di progettazione software, che descrivono come risolvere tali problemi in modo riutilizzabile e flessibile. Non sono pezzi di codice specifici, ma linee guida che possono essere adattate alle esigenze del progetto.
"Un Design Pattern descrive un problema che si presenta ripetutamente nel nostro ambiente e ne fornisce la soluzione essenziale." - Christopher Alexander
Gli elementi essenziali di un Design Pattern sono:
Nome del Pattern: identifica il problema e la sua soluzione.
Problema: quando e perché applicare il pattern.
Soluzione: descrizione astratta della struttura e delle relazioni.
Conseguenze: risultati e compromessi dell'uso del pattern.
La descrizione formale include:
Nome e Classificazione,
Intento,
Conosciuto Anche Come,
Motivazione,
Applicabilità,
Struttura,
Partecipanti,
Collaborazioni,
Conseguenze,
Implementazione,
Esempio di Codice.
Gli scopi dei Design Pattern sono:
Creazionali: gestiscono la creazione degli oggetti per migliorare flessibilità e riutilizzo.
Strutturali: definiscono come combinare classi e oggetti per formare strutture estensibili.
Comportamentali: ottimizzano la comunicazione e distribuzione delle responsabilità tra gli oggetti.
Gli ambiti dei Design Pattern sono:
Di Classe: si applicano principalmente alla struttura delle classi.
Di Oggetto: si applicano principalmente alla gestione e interazione degli oggetti.
Per selezionare un Design Pattern:
Valutare come risolve problemi di design,
Consultare le sezioni di Intento,
Considerare i pattern con scopi simili,
Studiare la relazione tra pattern,
Esaminare le cause di eventuali riprogettazioni,
Identificare cosa dovrebbe essere variabile nel design.
I Design Pattern più comuni includono:
Creazionali: Abstract Factory, Factory Method.
Strutturali: Adapter, Composite, Decorator.
Comportamentali: Observer, Strategy, Template Method.
I pattern creazionali sono:
Abstract Factory
Factory Method
Builder
Prototype
Singleton Questi pattern ottimizzano la creazione di oggetti, migliorando la flessibilità e riusabilità.
I pattern strutturali sono:
Adapter
Composite
Decorator
Facade
Flyweight
Proxy Questi pattern facilitano la composizione e l'estensibilità di classi e oggetti.
I pattern comportamentali sono:
Observer
Strategy
Template Method
Chain of Responsibility
Command
Mediator
Memento
State
Visitor
Interpreter Essi ottimizzano la comunicazione e la distribuzione delle responsabilità tra gli oggetti.
I pattern di classe sono pattern che operano principalmente sulla struttura delle classi, regolando l'ereditarietà e le relazioni tra le classi. Sono: Factory Method, Adapter, Interpreter, Template Method
I pattern ad oggetti regolano la composizione e interazione tra oggetti, consentendo flessibilità e modularità nella progettazione del sistema.
Sono:
Abstract Factory
Builder
Prototype
Singleton
Adapter
Bridge
Composite
Decorator
Facade
Proxy
Chain od Responsibility
Command
Iterator
Mediator
Memento
Flyweight
Observer
State
Strategy
Visitor