Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
IngSW DP 04 DesignPatternComportamentali
IngSW DP 04 DesignPatternComportamentali
alfredo.milani@unipg.it
INTRODUZIONE
Architetturali
Model view controller
Ingegneria del Software - Design Patter Alfredo Milani 2
INTRODUZIONE
Scopo dei design pattern comportamentali
Motivazione
next.handleRequest();
Ingegneria del Software - Design Patter Alfredo Milani 7
}
CHAIN OF RESPONSIBILITY
Struttura
Ogni ConcreteHandler
verifica se gestire la richiesta o
rinviarla all’handler successivo.
La richiesta potrebbe anche essere
non gestita da alcun handler.
f.addWindowListener(new
ascoltatore);
Motivazione
Necessità di gestire richieste di cui non si conoscono i
particolari
Toolkit associano ai propri elementi, richieste da eseguire
Una classe astratta, Command, definisce l’interfaccia
per eseguire la richiesta
La richiesta è un semplice oggetto
Supporto a transazione
Un comando equivale ad una operazione atomica
Implementa
la richiesta
concreta,
invocando
l’operazione
sul receiver
- Prelievo
- Versamento
- Undo
Invoker.invoke(println("foo"))
Invoker.invoke {
È possibile sostituire il
println("bar 1")
println("bar 2") command con oggetti funzione:
} maggior concisione, ma minor
configurabilità
Motivazione
“Per scorrere non è necessario conoscere”
Devono essere disponibili diverse politiche di
attraversamento
Iterator pattern sposta la responsabilità di
attraversamento in un oggetto iteratore
Tiene traccia dell’elemento corrente
Interfaccia di creazione
degli iteratori (factory
method) Ritorna un’istanza di
un iteratore concreto
Iteratori robusti
Assicurarsi che l’inserimento e la cancellazione di elementi
dall’aggregato non creino interferenze
Null Iterator
Iteratore degenere che implementa IsDone con il ritorno di
true
Utile per scorrere strutture ricorsive
Motivazione
Mantenere la consistenza fra oggetti
Modello e viste ad esso collegate
Observer pattern definisce come implementare la
relazione di dipendenza
Subject: effettua le notifiche
Observer: si aggiorna in risposta ad una notifica
“Publish - Subscribe”
Ingegneria del Software - Design Patter Alfredo Milani 34
OBSERVER
Motivazione
Ha un riferimento al
Mantiene lo stato di soggetto concreto e
cui viene data una possiede lo stato che deve
“vista” concreta essere aggiornato
Modifica e notifica
Aggiornamento delle
“viste”
Comunicazione broadcast
Libertà di aggiungere osservatori dinamicamente
Motivazione
Esistono differenti algoritmi (strategie) che non
possono essere inserite direttamente nel client
I client rischiano di divenire troppo complessi
Differenti strategie sono appropriate in casi differenti
Interfaccia supportata da
tutti gli algoritmi
Implementazione
concreta di un algoritmo
Ingegneria del Software - Design Patter Alfredo Milani 46
STRATEGY
Conseguenze
Definizione di famiglie di algoritmi per il riuso del
contesto
Alternativa all’ereditarietà dei client
Evita di effettuare subclassing direttamente dei contesti
Eliminazione degli statement condizionali
void Composition::Repair() {
switch (_breakingStrategy) {
case SimpleStrategy:
ComposeWithSimpleCompositor();
break;
case TeXStrategy:
ComposeWithTeXCompositor(); void Composition::Repair() {
break;
// ... _compositor->Compose();
} // merge results with existing
} // composition, if necessary
}
ogni occorrenza
Implementazione strategie
C++: Template, Java: Generics
Solo se l’algoritmo può essere determinato a compile time e
Motivazione
Definire un algoritmo in termini di operazioni astratte
Viene fissato solo l’ordine delle operazioni
Le sottoclassi forniscono il comportamento concreto
Implementa le operazioni
primitive fornendo i passi
concreti all’algoritmo
Operazioni hook
Forniscono operazioni che di default non fanno nulla, ma
...