Design Pattern nella programmazione OO

Design Pattern nella programmazione OO

Nel1994 è stato pubblicato per la prima volta il libro: “Design Patterns: Elements of Reusable Object-Oriented Software” che ha rivoluzionato il modo in cui si utilizza la programmazione Object Oriented.

Con il termine Design Pattern si intende una metodo concettuale per risolvere problemi che possono crearsi nella realizzazione di un software realizzato con un linguaggio di programmazione Object Oriented.

Si può anche definire come la descrizione di soluzioni progettuali ricorrenti riguardanti problemi di “software design”.

Tipi di design pattern:
• Creazionali
• Strutturali
• Comportamentali

I Design Pattern di tipo Creazionali nascondono il costruttore della classe e pubblicano un metodo per poter instanziare un oggetto della classe, servono ad astrarre il processo di creazione degli oggetti (instanziazione)

Ne esistono di vari tipi e ognuno con uno scopo diverso:

Singleton: permette di avere uno ed un solo oggetto di una determinata classa
Factory Method: permette la creazione di oggetti senza dover specificare l'esatta classe
Abstract Factory:
Prototypes:
Builder:

I Design Pattern strutturali:

Adapter: Il design pattern Adapter permette di convertire l’interfaccia di una classe per permettere l’interoperabilità tra classi

Bridge:

Decorator:

Composite:

Facade:

Proxy:

I Behavioural Pattern:

Template Method: definisce un metodo che contiene lo scheletro dell’algoritmo e delega l’implementazione dei metodi a delle sottoclassi, si usa per creare frameworks che contengono la parte che resta immutata dell’algoritmo e permettere l’implementazione di sottoclassi che implementano le parti variabili dell’algoritmo.
Serve anche per spostare in una classe comune i comportamenti condivisi da più classi al fine di ridurre la duplicazione del codice.

Strategy Pattern: definisce una famiglia di algoritmi che fanno la stessa cosa e che sono interscambiabili tra di loro e permettono di decidere quali utilizzare a runtime.

State: permettere ad un oggetto di modificare il suo comportamento quando il suo stato interno cambia senza utilizzare istruzioni condizionali.

Observer: definisce una relazione 1-n tra oggetti in modo che quando un oggetto modifica il suo stato lo notifichi a tutti gli

oggetti in relazione Motivazione: permette la separazione tra il livello di presentazione dei dati View da quello dei dati applicativi Model. La modifica al modello comporta l’aggiornamento della view con i dati aggiornati.

Iterator: fornisce un metodo per accedere agli elementi di un oggetto aggregato (collection) in modo sequenziale senza esporre la rappresentazione sottostante.

Visitor: rappresenta una operazione da eseguire sugli elementi di una struttura di oggetti, permettendo di definire nuove operazioni senza modificare gli elementi su cui opera.

Memento: serve per memorizzare lo stato interno di un oggetto senza violare la proprietà di encapsulation, utile per implentare funzione UNDO