Ci sono molte spiegazioni del modello di comando là fuori, ma ho trovato un po ‘ difficile da digerire o capire l’esempio fornito in quei blog/post.
Quindi, qui cercherò di spiegare nel modo in cui ho capito.
Per capire il modello di comando torniamo agli anni ‘ 90 quando avevamo enormi televisori senza telecomando (almeno in India). Bei vecchi tempi 😉
Avevamo tutte le manopole per on/off, aumentare / diminuire i volumi.
Tutto andava bene, funzionava bene, l’unico problema era se qualcuno voleva accendere/spegnere la TV o ridurre/aumentare il volume, dovevano andare fino in fondo alla TV e usare la manopola.
Ora pensa questo in modo orientato agli oggetti. Un televisore è un oggetto che ha un sacco di operazioni/metodi/funzioni o “Comando”. Stiamo accedendo direttamente all’oggetto TV per richiamare questi comandi.
Il problema con questo approccio?
- Hai bisogno di un oggetto per richiamare un comando, di conseguenza, a piedi tutta la strada per la TV
- Ogni PIATTO ha la sua implementazione di start/stop e non siamo in grado di ri-utilizzare il Comando “invocazione”
- Se un altro dispositivo dire “Set-Top-Box” vogliono le stesse funzionalità, c’è modo di riutilizzare le stesse operazioni — “Telecomando Universale”
Come possiamo risolvere questo problema?
Immagina che il televisore abbia un’interfaccia che implementa on / off e altre funzionalità ed espone questi metodi / operazioni, dando l’istanza dell’interfaccia a un “altro oggetto”. Questo potrebbe risolvere il nostro problema. Entriamo nel codice:
In primo luogo, creeremo una classe TV, che ha le operazioni on/off.
Allo stesso modo, creeremo una classe Set-top box mentre stiamo creando un telecomando universale.
Ora che abbiamo definito i nostri dispositivi e le sue operazioni, abbiamo bisogno di una classe(Comando) che possa mantenere gli oggetti di TV/SetTopBox e richiamare queste operazioni.
Creiamo la nostra classe di comando. Poiché vogliamo eseguire due operazioni su questi dispositivi, la classe di comando “avrà” un oggetto di tipo iDevice.
Abbiamo bisogno di due comandi ” ON “e”OFF”.
Questi oggetti di comando On/Off avranno una funzione/metodo di esecuzione, che richiamerà la rispettiva operazione sul dispositivo che ha.
Se hai notato, ho creato le classi con il nome ” OnCommad “e non”TVOnCommand”. L’idea è di riutilizzare la classe di comando per diversi dispositivi. Questo è il nostro comando universale, che supporta qualsiasi dispositivo.
Questo ci permetterà di creare un telecomando universale. Tombola!!!!
Fino ad ora, abbiamo estratto le operazioni del dispositivo sotto forma di “Comando”. L’unica cosa che ci rimane è creare un telecomandocontrollo, per attivare il “comando”.
Prima di creare il controllo remoto, abbiamo bisogno di creare pulsanti e ogni pulsante eseguirà il rispettivo comando.
La classe RemoteButton ha un oggetto comando, che viene eseguito quando viene premuto il pulsante.
Infine, creiamo il nostro dispositivo di controllo remoto, che avrà più pulsanti per ogni operazione.
Quando stiamo creando un dispositivo di controllo remoto (usando il costruttore), istanzieremo tutti gli oggetti e assegneremo.
Se si guarda il codice di cui sopra, abbiamo definito più pulsanti nel nostro telecomando e stiamo cercando di fare telecomando universale.
Siamo pronti a creare e giocare con il nostro RemoteControlDevice 🙂
Uscita:
TV is on!
TV is off!
SetTopBox is on!
SetTopBox is off!Process finished with exit code 0
Come visto in uscita ho premuto diversi pulsanti, per eseguire una serie di operazioni sui Dispositivi.
Quindi, in breve, l’idea è quella di dare al cliente(utente psvm/TV) un telecomando invece di farli camminare fino alla TV o dare la TV per accendere/spegnere la TV 😀
Conclusione
In questo post, abbiamo parlato del modello di progettazione dei comandi.
In parole semplici:
L’idea è di incapsulare le operazioni in un oggetto diverso(Comando) e riutilizzare e quindi creare diversi pulsanti per eseguire questi oggetti di comando che hanno operazioni di dispositivo in esso.
Come al solito, puoi trovare tutto il codice sul mio GitHub.