Pase las solicitudes del cliente a un objeto, lo que le permite parametrizar al cliente con diferentes solicitudes. Utilizado para desacoplar el "solicitante de comportamiento" y el "implementador de comportamiento", se puede lograr un acoplamiento suelto entre los dos para adaptarse a los cambios. Separar los factores cambiantes e inmutables.
1. Papel
Dominio
Define la interfaz del comando y declara el método de ejecución.
Concreta
El objeto de implementación de la interfaz de comando es una implementación "virtual"; Por lo general, contiene el receptor y llama a la función del receptor para completar la operación que el comando realizará.
Receptor
Receptor, el objeto que realmente ejecuta el comando. Cualquier clase puede convertirse en un receptor siempre que pueda implementar las funciones correspondientes requeridas por el comando.
Invocador
Se requiere el objeto de comando para ejecutar la solicitud, y generalmente mantiene el objeto de comando y puede prescindir muchos objetos de comando. Aquí es donde el cliente realmente desencadena el comando y requiere que el comando realice la operación correspondiente, lo que significa que es equivalente a usar la entrada del objeto de comando.
Cliente
Cree un objeto de comando específico y establezca el receptor del objeto de comando. Tenga en cuenta que este no es un cliente en nuestro sentido convencional, sino que está ensamblando el objeto de comando y el receptor. Tal vez, sería mejor llamar a este cliente un ensamblador, porque el cliente que realmente usa el comando desencadena la ejecución de Invoker.
2. Ventajas
3. Desventajas <Br /> El uso del modo de comando puede hacer que algunos sistemas tengan demasiadas clases de comando específicas. Debido a que se requiere una clase de comando específica para cada comando, algunos sistemas pueden requerir una gran cantidad de clases de comando específicas, lo que afectará el uso del modo de comando.
IV. Situación aplicable
5. Aplicación <Br /> La simulación incluye comandos de encendido, apagado y cambio para la operación del televisor. El código es el siguiente
// Interfaz para ejecutar el comando de interfaz pública comando {void ejecute (); } // Receptor de comando receptor de clase pública TV {public int currentChannel = 0; public void Turnon () {System.out.println ("El televisino está activado"); } public void gurnoff () {System.out.println ("El televisor está apagado"); } public void ChangeChannel (int Channel) {this.CurrentChannel = canal; System.out.println ("Now TV Channel Is" + Channel); }} // Comando de apagado ConcreteCommand public class CommandOn implementa el comando {private tv mytv; Public Commando (TV TV) {mytv = tv; } public void ejecutute () {mytv.turnon (); }} // Comando de cierre ConcreteCommand public class Commandoff Implements Command {private tv mytv; Public CommandOff (TV TV) {mytv = tv; } public void ejecute () {mytv.TurnOff (); }} // Comando de conmutación de canal ConcreteCommand public class CommandChange Command {private tv mytv; canal privado int; Public CommandChange (TV TV, Int Channel) {mytv = tv; this.channel = canal; } public void ejecute () {mytv.changeChannel (canal); }} // Se puede considerar como un control remoto Invoker Control de clase pública {Comando privado OnCommand, Offcommand, ChangeChannel; Public Control (comando ON, Command Off, Command Channel) {OnCommand = ON; offcommand = off; ChangeChannel = canal; } public void Turnon () {OnCommand.execute (); } public void gurnoff () {OffCommand.Execute (); } public void ChangeChannel () {ChangeChannel.ExeCute (); }} // prueba Cliente de clase Cliente de clase pública Cliente {public static void main (string [] args) {// comando receptor receptor tv mytv = new tv (); // Comando de encendido ConcreteCommond Commando ON = new Commandon (mytv); // comando de encendido concreteCommond comandoff off = new commandOff (mytv); // Comando de conmutación de canal ConcreteCommond Commandchange Channel = new Commandchange (mytv, 2); // Control de comando Objeto Invoker Control Control = nuevo control (encendido, apagado, canal); // Power-on Control.Turnon (); // Switch Channel Control.ChangeChannel (); // apagar el control.Turnoff (); }} Resultados de la ejecución
El televisino está encendido.
Ahora el canal de televisión es 2
El televisor está apagado.
6. Resumen
1. La esencia del modo de comando es encapsular el comando y separar la responsabilidad de emitir el comando y la responsabilidad de ejecutar el comando.
2. Cada comando es una operación: la parte solicitante emite una solicitud, que requiere que se realice una operación; La parte receptora recibe la solicitud y realiza la operación.
3. El modo de comando permite que la parte solicitante sea independiente de la parte receptora, de modo que la parte solicitante no tenga que saber la interfaz de la parte que recibe la solicitud, ni tiene que saber cómo se recibió la solicitud, si, cuándo y cómo se ejecutó la operación.
4. El modo de comando hace que la solicitud en sí misma sea un objeto, que se puede almacenar y pasar como otros objetos.
5. La clave para el modo de comando es introducir una interfaz de comando abstracta y los programas de remitente para la interfaz de comando abstracto. Solo los comandos específicos que implementan la interfaz de comando abstracto pueden estar asociados con el receptor.
Lo anterior es una introducción detallada al patrón de diseño del comando Java, espero que sea útil para el aprendizaje de todos.