Cosa è un Design Pattern, secondo Christopher Alexander, ogni pattern descrive un problema ricorrente nel nostro ambiente ed espone il nocciolo della soluzione a tale problema, in modo tale che possa essere applicato in modo ricorrente.
Un design pattern è composto da quattro elementi essenziali:
-
Il nome del pattern, il quale deve essere in grado di descrivere il problema e la soluzione in una o due parole.
-
Il problema, descrive quando ed in che contesto il pattern deve essere applicato .
-
La soluzione, descrive gli elementi che compongono il disegno(design), le loro relazioni, le responsabilità e le collaborazioni
-
Le conseguenze, ovvero i risultati dell’applicazione del pattern
Un pattern viene descritto graficamente utilizzando la notazione Grafica, ma questo non è sufficiente, per questo viene descritto in modo consistente, cercando di seguire uno schema ben preciso, ecco i dettagli di tale schema:
-
Nome del pattern e Classificazione
-
Obiettivo
-
Alias del nome
-
Motivazione: uno scenario che illustra i problemi di progetto e come le classi e gli oggetti presenti nel pattern risolvono il problema
-
Applicabilità
-
Struttura: una rappresentazione grafica basata sulla OMT (Object Modeling Technique)
-
Partecipanti, in termini di oggetti e classi
-
Collaborazioni: fra i partecipanti
-
Conseguenze: quali aspetti sono modificabili, che risultati porta l’utilizzo del Design Pattern
-
Implementazione, problematiche, tecniche che devono essere considerate lato implementazione
-
Esempio di Codice che illustra di un frammento di Pattern
-
Casi Reali ovvero esempi del pattern in questione trovati in sistemi reali
-
Pattern Collegati
Di seguito un catalogo dei Design Pattern:
-
Abstract Factory
-
Fornisce una interfaccia per creare gruppi di oggetti relazionati o dipendenti l’un l’altro, senza specificare le loro classi concrete.
-
-
Adapter
-
Converte l’interfaccia di una classe in un’altra interfaccia che i clienti si aspettano
-
-
Bridge
-
Disaccoppia una astrazione dalla sua implementazione, in modo tale che le due possano variare indipendentemente
-
-
Builder
-
Separa la costruzione di un oggetto complesso dalla sua rappresentazione, così che la medesima costruzione può generare differenti rappresentazioni.
-
-
Chain of Rresponsibility
-
Permette l’accoppiamento di chi invia la richiesta e chi la riceve, in modo tale da dare a più di un oggetto la chance di gestire la richiesta.
-
-
Command
-
Incapsula la richiesta in un oggetto, in modo tale da poter parametrizzare i client
-
-
Composite
-
Compone gli oggetti in strutture ad albero al fine di rappresentare tutto in una gerarchia
-
-
Decorator
-
Aggiunge responsabilità ad un oggetto in modo dinamico. E’ una alternativa flessibile al metodo di sottoclasse per estendere funzionalità-
-
-
Facade
-
Fornisce una interfaccia univoca ad un insieme di interfacce presenti in un sottosistema
-
-
Factory Method
-
Definisce una interfaccia per creare un oggetto, ma lascia la decisione di decidere quale classe istanziare alle sottoclassi.
-
-
Flyweight
-
Utilizza la condivisione per supportare un vasto numero di oggetti molto specifici in modo efficace
-
-
Interpreter
-
Dato un linguaggio, definisce una rappresentazione per la sua grammatica (come fa un interprete di linguaggio)
-
-
Iterator
-
Fornisce il metodo per accedere agli elementi di un oggetto aggregato in modo sequenziale, senza esporre la propria rappresentazione
-
-
Mediator
-
Definisce un oggetto che incapsula come un insieme di oggetti interagiscono
-
-
Memento
-
Senza violare il metodo di incapsulamento, cattura ed esternalizza uno stato interno di un oggetto, in modo tale che l’oggetto possa ritornare nello stato precedente più tardi
-
-
Observer
-
Definisce una dipendenza di tipo uno-molti tra gli oggetti, in modo tale che la variazione di stato di un oggetto permette l’aggiornamento di tutti quelli correlati
-
-
Prototype
-
Specifica i tipi di oggetti da creare utilizzando un’istanza prototipata, e crea nuovi oggetti copiando il prototipo
-
-
Proxy
-
Fornisce un surrogato per un oggetto in modo tale da controllarne l’accesso
-
-
Singleton
-
Assicura che una classe possieda una unica istanza e fornisce un punto di accessi globale a quest’ultima
-
-
State
-
Permette ad un oggetto di cambiare il suo comportamento quando il suo stato interno varia.
-
-
Strategy
-
Definisce una serie di algoritmi, incapsula ognuno di essi e li rende interscambiabili
-
-
Template Method
-
Definisce lo scheletro di un algoritmo in una operazione, lasciando gestire alle sottoclassi alcuni passaggi
-
-
Visitor
-
Rappresenta una operazione che deve essere eseguita negli elementi della struttura di un oggetto
-
Tutti i Pattern elencati pocanzi variano fortemente sia per granularità che per livello di astrazione, vale la pena classificarli secondo due metodi:
-
Utilizzo / Scopo
-
Ovvero, cosa fa un Design Pattern, può essere di tipo :
-
Creazionale
-
Strutturale
-
Comportamentale
-
-
-
Visibilità
-
Ovvero se si applica prima all’oggetto o alla classe
-
Ecco di seguito la classificazione di tutti i Design Pattern descritti:
-
Creazionali
-
Classe
-
Factory Method
-
-
Oggetto
-
Abstract Factory
-
Builder
-
Prototype
-
Singleton
-
-
-
Strutturali
-
Classe
-
Adapter
-
-
Oggetto
-
Adapter
-
Bridge
-
Composite
-
Decorator
-
Facade
-
Flyweight
-
Proxy
-
-
-
Comportamentali
-
Classe
-
Interpreter
-
Template Method
-
-
Oggetto
-
Chain of Responsibility
-
Command
-
Iterator
-
Mediator
-
Memento
-
Observer
-
State
-
Strategy
-
Visitor
-
-










a proposito di Alexander, sai se esiste una sua biografia completa. Non la trovo da nessuna parte. Grazie e complimenti per l’articolo. giovanni http://www.laficudinia.blogspot.com/
[...] una serie di articoli di “riepilogo” dei i concetti più interessanti. Dopo l’introduzione, la prima parte di articoli riguarda i Creational [...]