Post

Design Patterns – introduzione

In Senza categoria on novembre 10, 2009 by poyblog

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:

  1. Il nome del pattern, il quale deve essere in grado di descrivere il problema e la soluzione in una o due parole.

  2. Il problema, descrive quando ed in che contesto il pattern deve essere applicato .

  3. La soluzione, descrive gli elementi che compongono il disegno(design), le loro relazioni, le responsabilità e le collaborazioni

  4. 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

2 Risposte a “Design Patterns – introduzione”

  1. 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/

  2. [...] una serie di articoli di “riepilogo” dei i concetti più interessanti. Dopo l’introduzione, la prima parte di articoli riguarda i Creational [...]

Lascia un Commento

Fill in your details below or click an icon to log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Log Out / Modifica )

Foto Twitter

You are commenting using your Twitter account. Log Out / Modifica )

Foto di Facebook

You are commenting using your Facebook account. Log Out / Modifica )

Connecting to %s

Iscriviti

Get every new post delivered to your Inbox.