Cosa sono i design patterns?
I design patterns, letteralmente modelli di progettazione, sono un potente strumento per gli sviluppatori di software: forniscono, infatti, soluzioni ai comuni problemi di progettazione.
I modelli di progettazione sono generalmente volti a risolvere i problemi della generazione e dell’interazione degli oggetti, piuttosto che i problemi dell’architettura software complessiva.
I 23 design patterns della GoF
I design patterns della Gang of Four sono divisi in quattro categorie: modelli creativi, strutturali e comportamentali.
I modelli creativi che forniscono modi per istanziare singoli oggetti o gruppi di oggetti correlati sono cinque:
- Abstract Factory: fornisce a un client un insieme di oggetti correlati o dipendenti.
- Builder: crea oggetti complessi con parti costitutive che devono essere create nello stesso ordine o utilizzando un algoritmo specifico.
- Factory Method: sostituisce i costruttori di classi, astraendo il processo di generazione dell’oggetto in modo che il tipo dell’oggetto istanziato possa essere determinato in fase di esecuzione.
- Prototype: crea un’istanza di un nuovo oggetto copiando tutte le proprietà di un oggetto esistente, creando un clone indipendente.
- Singleton: questo modello assicura che venga creata solo un’istanza di un oggetto.
I modelli strutturali che forniscono un modo per definire le relazioni tra classi o oggetti sono sette:
- Adapter: consente a due classi incompatibili di lavorare insieme.
- Bridge: è utilizzato per separare gli elementi astratti di una classe dai dettagli d’implementazione.
- Composite: è usato per creare strutture ad albero gerarchiche e ricorsive di oggetti correlati.
- Decorator: consente di aggiungere o rimuovere funzionalità dell’oggetto senza modificarne l’aspetto esterno o la funzione.
- Facade: è usato per fornire un’interfaccia semplice a un oggetto sottostante più complesso.
- Fliweight: riduce la memoria e l’utilizzo delle risorse per modelli complessi.
- Proxy: fornisce un’interfaccia segnaposto a un oggetto sottostante per controllare l’accesso e ridurre la complessità.
I modelli comportamentali che definiscono le modalità di comunicazione tra classi e oggetti, infine, sono undici:
- Chain of Responsibility: stabilisce una catena all’interno di un sistema, in modo che un messaggio possa essere gestito al livello in cui è stato ricevuto per la prima volta.
- Command: trasforma una richiesta in un oggetto autonomo che contiene tutte le informazioni sulla richiesta stessa.
- Interpreter: aiuta a convertire le informazioni da un linguaggio in un altro.
- Iterator: è usato per fornire un modo standard per attraversare un gruppo di oggetti.
- Mediator: semplifica la comunicazione tra gli oggetti.
- Memento: contiene un’istantanea dello stato di un oggetto, in modo che l’oggetto possa tornare al suo stato originale senza dover rivelare il suo contenuto.
- Observer: consente a un componente di trasmettere messaggi in modo flessibile ai destinatari interessati.
- State: permette a un oggetto di alterare il suo comportamento in relazione ai cambiamenti del suo stato interno.
- Strategy: definisce una famiglia di algoritmi e li rende intercambiabili.
- Template method: definisce i passaggi di base di un algoritmo e consente la modifica dell’implementazione dei singoli passaggi.
- Visitor: separa un algoritmo da una struttura di oggetti spostando la gerarchia dei metodi in un oggetto.