In un modulo (python) è definito illa seguenteclasse oggettoche segue.
<source lang=python>
Riga 18:
</source>
EssoQuesta è destinatodestinata ad occuparsi della gestione delle camere di una casa enonché, attualmente, presiede anche allo svolgimento di alcuni lavori da eseguire.
Sono infatti definite, per ereditarietà, alcune sottoclassi che implementano diversi lavori diversiche è dapossibile svolgere sulle pareti delle camere.
<source lang=python>
Riga 41:
</source>
Questo approccio hapresenta alcunediversi conseguenzeaspetti negativenegativi.
# SeA esistonofronte di ''n'' possibili lavori (azioni) ci si ritrovarendono costrettinecessarie ad avere moltediverse sottoclassi. Non solo: una per ciascuna azione da implementare maed anche quelle che servonouna per leogni possibilipossibile combinazionecomposizione di azioni che voglio ottenerebase (ad esempio dipingere camera e montarcimontare deglidi seguito gli scaffali). SeQualora invece le azioni sonofossero ''Command'' indipendenti dal RoomHandler, possosarebbe istanziarlipossibile creare istanze su quest'ultimo senzapiuttosto doverche subclassarecreare sottoclassi.
# ''RoomHandler'' contiene sia il codice di gestione delle camere che il codice che svolgeesegue ile lavoriazioni: inesso sostanzaè hasovraccarico troppedi responsabilità e se voglioed estendere un'azione lavorocomporta devoun'aumento complicare didella conseguanzacomplessità anchedel ''RoomHandler''.
# Testare oggettidi così complessi,oggetti con moltenumerose responsabilità,diventaè faticosoin egenere complesso ed oneroso. SeIncapsulare le azioni sono incapsulate in ''Command'' testaterende separatamentepossibile riescoil atesting semplificareesclusivo anchesu iciascuna testazione (eventualmente ricorrendo all'uso di [[Mock Objects|Mock]]) il che semplifica notevolmente la fase di testing e validazione.
Segue il codice equivalente strutturato seguendo le indicazioni del pattern:
Volendo quindi rifattorizzare il codice precedente:
<source lang=python>
Riga 71:
</source>
AlSia momentonell'atto delladi creazione di un'istanza ''RoomHandler'',sia a ''run-time'', è possibile selezionare ile azioni possibiliche lavorisi daintende svolgere: