Ricettario dei principali pattern GoF
Docente: Gabriele Lombardi
[email protected]
© 2010 - CEFRIEL
The present original document was produced by CEFRIEL and the Teacher for the benefit and internal use of this
course, and nobody else may claim any right or paternity on it. No right to use the document for any purpose other than
the Intended purpose and no right to distribute, disclose, release, furnish or disseminate it or a part of it in any way or
form to anyone without the prior express written consent of CEFRIEL and the Teacher.
© copyright Cefriel and the Teacher-Milan-Italy-23/06/2008. All rights reserved in accordance with rule of law and
international agreements.
© 2010 - CEFRIEL
Sommario
SLIDE
CONTENUTO
Creazionali
Pattern di creazione di nuove istanze
Strutturali
Pattern di strutturazione dati/comunicazione
Comportamentali
Gestione del comportamento negli algoritmi
© 2010 - CEFRIEL
Creazionali: Singleton

Scopo:
– istanza singola di una classe (es.: registry);
– rispetto a soli metodi statici permette di sfruttare
polimorfismo e altri pattern creazionali (factory, …).

Ingredienti:
– costruttore privato (sparisce quello di default);
– attributo statico privato per mantenere l’unica istanza;
– factory method “getInstance” per lazy-evaluation.
© 2010 - CEFRIEL
Creazionali: Factory Method

Scopo:
– generazione di una istanza da metodo statico;
– utilizzo di strutture dati statiche durante la creazione;

• es.: per implementare il riciclo di istanze;
Ingredienti:
– costruttore privato (impedisce l’istanziazione diretta);
– metodi statici di restituzione di istanze.
© 2010 - CEFRIEL
Creazionali: Abstract Factory

Scopo:
– disaccoppiare le classi che istanziano da quelle che scelgono e
configurano le istanze;
– eventualmente astrarre la natura delle istanze;

Ingredienti:
–
–
–
–
–
classe target da istanziare;
classe astratta con factory method non statico;
classi concrete che implementano al factory;
eventualmente costruttore superclasse factory;
eventualmente gerarchia classe target.
© 2010 - CEFRIEL
Creazionali: Builder

Scopo:
– fornire uno strumento trasparente per la creazione di
oggetti complessi (composti da più parti);

Ingredienti:
– classe composta e parti componenti;
– classe builder con metodi di:
– creazione delle parti;
– creazione dell’istanza usando le parti precedenti;
– eventuale hiding di costruttori e classi delle parti.
© 2010 - CEFRIEL
Creazionali: Prototype

Scopo:
– fornire un meccanismo per generare istanze da
prototipi (es.: tramite loro clonazione);

Ingredienti:
– metodo di istanza per la generazione di un’altra
istanza della stessa classe (o sottoclasse);
– eventuale costruttore nascosto al client;
– eventuali parametri aggiuntivi nel factory method.
© 2010 - CEFRIEL
Strutturali: Adapter

Scopo:
– adattare un’implementazione a una gerarchia diversa;
– nascondere il reale implementor dell’operazione;

Ingredienti:
–
–
–
–
–
gerarchia astrazione;
classe adapter che implementante l’astrazione;
istanza dell’implementor nell’adapter;
operazioni delegate all’implementor;
eventuale codice di adattamento semantico.
© 2010 - CEFRIEL
Strutturali: Composite

Scopo:
– comporre ad albero elementi semplici e composti;
– si pensi a oggetti grafici e gruppi di oggetti grafici;

Ingredienti:
– gerarchia di astrazione;
– classe aderente alla gerarchia composta con elementi
della stessa (dell’interfaccia/superclasse astratta);
– operazioni delegate agli elementi della composizione.
© 2010 - CEFRIEL
Strutturali: Decorator

Scopo:
– “decorare” il comportamento di
una classe concreta;
– rendere tale differenza
trasparente al client;

Ingredienti:
– gerarchia di astrazione;
– sottoclasse della classe da
decorare (Leaf);
– operazioni delegate alla
superclasse concreta…
– …successivamente modificate
con codice aggiuntivo.
© 2010 - CEFRIEL
Strutturali: Facade

Scopo:
– mostrare un punto di accesso semplice a un
pacchetto dalle operazioni complesse;
– nascondere complessi dettagli di collaborazione;

Ingredienti:
– una classe che accede al contenuto del pacchetto;
– operazioni semanticamente semplici orchestranti le
classi presenti all’interno del pacchetto.
© 2010 - CEFRIEL
Comportamentali: Command

Scopo:
– isolare una funzionalità dai suoi punti di accesso;
– astrarre il concetto di operazione eseguibile;

Ingredienti:
– classe astratta o interfaccia Command;
– metodo astratto di esecuzione come contratto.
© 2010 - CEFRIEL
Comportamentali: Iterator

Scopo:
– iterare sugli elementi di una struttura dati senza
conoscere i dettagli della struttura stessa;

Ingredienti:
– interfaccia di astrazione del concetto di iterazione;
– astrazione di struttura dati che supporta l’iteratore;
– strutture dati implementanti tale astrazione.
© 2010 - CEFRIEL
Comportamentali: Observer

Scopo:
– consentire l’astrazione della notifica di eventi;
– disaccoppiare chi genera l’evento da chi lo riceve;

Ingredienti:
– interfaccia di notifica dell’evento (ricevente);
– ascoltatori che la implementano;
– classe di generazione degli aggiornamenti.
© 2010 - CEFRIEL
Comportamentali: Template Method

Scopo:
– creare una gerarchia di classi in cui varia solamente
una funzionalità, senza dover replicare codice;
– astrarre una parte di una classe usata da sé stessa;

Ingredienti:
– classe astratta con metodo astratto (protetto);
– sottoclassi implementanti quel metodo.
© 2010 - CEFRIEL
Comportamentali: Strategy

Scopo:
– astrarre un algoritmo facendo sì la sua scelta
avvenga a run-time (criteri vari, es.: efficienza);

Ingredienti:
– interfaccia/classe astratta rappresentante l’algoritmo;
– classi implementanti in concreto l’algoritmo stesso.
© 2010 - CEFRIEL
Da qui?

Abbiamo visto solamente un assaggio:
– i design pattern GoF non sono solo questi;
– molti altri design pattern esistono in letteratura;
– costruire architetture usando i design pattern richiede
esperienza oltre che profonda comprensione;
– esistono altri strumenti come smell e antipattern;
– tecniche di refactoring vengono utilizzate per
trasformare un’architettura in un’altra migliore.

Letteratura?
– Design Patterns della Gang of Four;
– Refactoring di Fowler;
– Patterns of Enterprise Applications Architecture, Fowler.
© 2010 - CEFRIEL