Command pattern: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m →Altri progetti: Aggiunto il parametro "Preposizione" nel template "Interprogetto" |
|||
(41 versioni intermedie di 31 utenti non mostrate) | |||
Riga 1:
Nella [[
Il Command pattern è uno dei [[design pattern]] che permette di isolare la porzione di codice che effettua un'azione (eventualmente molto complessa) dal codice che ne richiede l'esecuzione; l'azione è incapsulata nell'oggetto Command.
Riga 5:
L'obiettivo è rendere variabile l'azione del client senza però conoscere i dettagli dell'operazione stessa. Altro aspetto importante è che il destinatario della richiesta può non essere deciso staticamente all'atto dell'istanziazione del command ma ricavato a tempo di esecuzione.
== Struttura ==
[[
== Esempio ==
In un modulo (python) è
<syntaxhighlight lang=python>
class RoomHandler:
...
</syntaxhighlight>
Sono infatti definite
<syntaxhighlight lang=python>
class Painter(RoomHandler)
...
Riga 39:
def actionWork(self, arguments):
""" mount shelves to some walls """
</syntaxhighlight>
Questo approccio
#
# ''RoomHandler'' contiene sia il codice di gestione delle camere che il codice che
# Testare oggetti
Segue il codice equivalente strutturato seguendo le indicazioni del pattern:
<syntaxhighlight lang=python>
class Command:
Riga 69:
def execute(self, wall):
""" mount shelf to a wall """
</syntaxhighlight>
<syntaxhighlight lang=python>
def createRoomHandler(self):
handler = RoomHandler()
Riga 84:
for work in self.getWorks():
work.execute(self.getSelectedWall())
</syntaxhighlight>
== Considerazioni ==▼
#
▲==Considerazioni==
# È possibile incapsulare un'azione in modo che
# I ''Command'',
# È possibile rendere asincrona la scelta dei comandi rispetto alla loro esecuzione. Un certo numero di command
== Bibliografia ==▼
▲# Il ricevente dell'operazione (nel nostro caso una parete) non è deciso al momento della creazione dei lavori ma a tempo di esecuzione.
* [[Erich Gamma|Gamma, E.]], [[Richard Helm|Helm, R.]], [[Ralph Johnson (informatico)|Johnson, R.]] e [[John Vlissides|Vlissides, J.]], '' [[Design Patterns]]: elementi per il riuso di software a oggetti'', Addison Wesley,
▲# È possibile incapsulare un'azione in modo che essa sia atomica. In questo modo si implementa un meccanismo di transazionalità in cui un'insieme di operazioni è svolto in toto o per nulla.
** Originale: ''Design Patterns: Elements of Reusable Object-Oriented Software'', Addison Wesley,
▲# I ''Command'', conoscendo le operazioni che devono svolgere, possono implementare anche un ''unexecute'' o ''undo''. Se necessario il Command, prima di eseguire, ricorda lo stato precedente alla sua esecuzione in modo da poter annullare la sua operazione.
▲# È possibile rendere asincrona la scelta dei comandi rispetto alla loro esecuzione. Un certo numero di command, selezionati da un client, possono essere ''consumati'' da un altro oggetto che li riceve in un tempo diverso dalla loro selezione.
== Altri progetti ==
▲==Bibliografia==
{{interprogetto|preposizione=sul}}
▲*[[Erich Gamma|Gamma, E.]], [[Richard Helm|Helm, R.]], [[Ralph Johnson|Johnson, R.]] e [[John Vlissides|Vlissides, J.]], '' [[Design Patterns]]: elementi per il riuso di software a oggetti'', Addison Wesley, [[1995]], ISBN 887192150X
▲**Originale: ''Design Patterns: Elements of Reusable Object-Oriented Software'', Addison Wesley, [[1995]], ISBN 0201633612
{{Design pattern}}
[[Categoria:Pattern]]▼
{{Portale|informatica}}
|