06 Pattern
06 Pattern
Esempi:
Abstract, Iterator, Factory, Singleton, Flyweight, State, Strategy, Proxy, Adaptor e Decorator
Esempio: Singleton
A volte una classe contiene per definizione un solo oggetto e.g., una tabella in cui ogni elemento individuato univocamente da un suo campo identificatore (se ci fossero piu` tabelle non si avrebbe garanzia di unicit) Altri es.: registro, log, device driver, Usare una variabile globale (dove mettere la tabella, ecc.) non mai una buona idea... Bisogna assicurare che una classe abbia una sola istanza e fornire un punto d'accesso globale a tale istanza. Ci sono varie possibilit, ma il pattern Singleton lo standard Non si pu assicurare che esista un solo esemplare della classe, se viene reso visibile il costruttore: Ogni chiamata del costruttore genera un nuovo oggetto. 4 Come fare a restituire la sola copia dell'oggetto?
Factory Method
Soluzione:
ll costruttore e` protected o private La creazione possibile invocando un metodo pubblico statico, detto factory: restituisce un oggetto di una classe senza essere costruttore di quella classe
Adapter
Software esistente usa un'interfaccia Altro software esistente ne usa un'altra Come combinarle senza cambiare il software? Molto spesso librerie diverse espongono interfacce diverse per fare la stessa cosa
Es. librerie grafiche. Software scritto per Windows che vienbe portato sotto MacOS o X (ambienti grafici incompatibili tra loro)
Adattare
Si interpone un Adapter con interfaccia esistente che richiama i metodi dell'oggetto da adattare (Adaptee)
I client vedono solo un'Interfaccia Target (o una classe astratta) Una classe concreta che implementa l'interfaccia 'si occupa di adattare i metodi verso gli Adaptee Risultato: non si modifica ne' il Client ne' l'Adaptee
Spiegazione
(Figura da Head First Design Patterns, Freeman et al, O'Reilly, October 2004)
UML
10
12
4: request( ) 5: 6: postProcess( ) 7:
13
Strategy
Il pattern Strategy fornisce un oggetto che compie unoperazione precisa, richiesta dallesterno
Per esempio, stabilire un ordinamento tra oggetti Strategy individua una famiglia di algoritmi, da incapsulare in classi dedicate
Strategy e' un esempio di delegation Un comportamento viene delegato a un'altra classe Un esempio di questo pattern nellinterfaccia Comparator di JDK 1.4
14
UML
15
ma serve un modo per confrontare gli elementi in s! Object non ha un metodo per il confronto e quindi occorre definirlo da qualche altra parte Idea: aggiungo come argomento al metodo un oggettino incaricato del confronto. Per potere rendere il metodo sort applicabile a ogni tipo, loggetto sar di tipo interfaccia. Quindi:
definisco l'interfaccia Comparator (esiste peraltro in java.util), che definisce sintatticamente il confronto di due oggetti fornisco una implementazione di Comparator per il tipo che voglio ordinare (es. IntegerComparator) Passo anche un Comparator quando chiamo la procedura per confrontare gli elementi
16
La Strategy giusta scelta dal costruttore di ciascun erede concreto del client
public ClientConcreto1() {strategy = new ConcreteStrategyA();
Molto usato quando si ha una famiglia di comportamenti, che sono usati all'interno di una gerarchia
Molti elementi della gerarchia usano lo stesso comportamento
19
Ci sono vari tipi di armi, a ciascuna delle quali corrisponde un diverso modo di combattere. L'arma pu essere cambiata con setWeapon();
useWeapon();
20
(Figura da Head First Design Patterns, Freeman et al, O'Reilly, October 2004)
21
Pattern strutturali
Hanno a che fare con la composizione di classi ed oggetti Es. Proxy
Pattern comportamentali
Si occupano di come oggetti interagiscono reciprocamente e distribuiscono fra loro le responsabilit Es. Strategy
22
Catalogo
Riferimenti
DesignPatternElementi
perilriusodisoftwareadoggetti
Autori:Gamma,Helm,Johnson,Vlissides.
Decorator
Un adapter che fornisce funzionalit aggiuntive a un Component: Decorator Il Decorator Pattern aggiunge dinamincamente nuove capacit a un oggetto (il Component) La libreria di classi di Java (Stream, RMI, interfaccia grafica) utilizza pesantemente Adaptor, Proxy e Decorator Il Decorator dello stesso tipo del Component: si pu sostituire dove ci si aspetta il Component
Decorator
26
27
28
Flyweight pattern
Quando molti oggetti identici (e immutabili) vengono utilizzati contemporaneamente, utile costruire solo un oggetto per ogni classe di equivalenza di oggetti identici
gli oggetti condivisi vengono chiamati flyweight (pesi mosca) perch spesso sono molto piccoli
Questo pattern va ovviamente usato solo se il numero di oggetti condivisi molto elevato Gli oggetti flyweight devono essere immutabili per evitare problemi di condivisione/aliasing
29
31