Geben Sie Anfragen vom Client in ein Objekt weiter, sodass Sie den Client mit unterschiedlichen Anforderungen parametrisieren können. Zum Entkoppeln von "Verhaltensanforderer" und "Verhaltensimperierung" kann eine lose Kopplung zwischen beiden erreicht werden, um sich an Änderungen anzupassen. Trennen Sie die sich ändernden und unveränderlichen Faktoren.
1. Rolle
Befehl
Definiert die Schnittstelle des Befehls und deklariert die Ausführungsmethode.
Beton
Das Implementierungsobjekt der Befehlsschnittstelle ist eine "virtuelle" Implementierung. Normalerweise hält der Empfänger und ruft die Funktion des Empfängers auf, um die vom Befehl auszuführende Operation zu vervollständigen.
Empfänger
Empfänger, das Objekt, das den Befehl wirklich ausführt. Jede Klasse kann ein Empfänger werden, solange sie die entsprechenden Funktionen implementieren kann, die vom Befehl erforderlich sind.
Invoker
Das Befehlsobjekt ist erforderlich, um die Anforderung auszuführen, und hält normalerweise das Befehlsobjekt und kann viele Befehlsobjekte enthalten. Hier löst der Client den Befehl tatsächlich aus und benötigt den Befehl, um die entsprechende Operation auszuführen, was bedeutet, dass er der Verwendung des Eintrags des Befehlsobjekts gleichwertig ist.
Kunde
Erstellen Sie ein bestimmtes Befehlsobjekt und legen Sie den Empfänger des Befehlsobjekts fest. Beachten Sie, dass dies kein Kunde in unserem konventionellen Sinne ist, sondern das Befehlsobjekt und den Empfänger zusammenstellt. Vielleicht wäre es besser, diesen Kunden als Assembler zu bezeichnen, da der Kunde, der den Befehl wirklich verwendet, die Ausführung von Invoker auslöst.
2. Vorteile
3. Nachteile <BR /> Die Verwendung des Befehlsmodus kann dazu führen, dass einige Systeme zu viele spezifische Befehlsklassen haben. Da für jeden Befehl eine bestimmte Befehlsklasse erforderlich ist, benötigen einige Systeme möglicherweise eine große Anzahl spezifischer Befehlsklassen, die die Verwendung des Befehlsmodus beeinflussen.
Iv. Anwendbare Situation
5. Anwendung <BR /> Die Simulation umfasst die Befehle für den Betrieb des Fernsehgeräts. Der Code ist wie folgt
// Schnittstelle zur Ausführung des Befehls für öffentliche Schnittstelle {void execute (); } // Befehls Empfängerempfänger öffentlicher Klasse TV {public int currentChannel = 0; public void Turnon () {System.out.println ("Der Televisino ist auf."); } public void turnoff () {System.out.println ("Der Fernseher ist aus."); } public void changechannel (int kanal) {this.currentChannel = Kanal; System.out.println ("Now TV -Kanal ist" + Kanal); }} // Befehl concreteCommand public class Commandon implementiert Befehl {private tv mytv; public commandon (tv tv) {mytv = tv; } public void execute () {mytv.Turnon (); }} // Befehl concreteCommand public class Commandoff implementiert Befehl {private tv mytv; public Commandoff (TV TV) {mytv = tv; } public void execute () {mytv.Turnoff (); }} // Channel Switching Command ConcreteCommand Public Class CommandChange Implements Command {private tv mytv; privater Int -Kanal; public CommandChange (TV TV, int Channel) {mytv = tv; this.channel = Channel; } public void execute () {mytv.changechannel (Kanal); }} // Es kann als Remote Control Invoker Public Class Control {private Command OnCommand, Offcommand, Changechannel; öffentlicher Steuerelement (Befehl ein, Befehl aus, Befehlskanal) {onCommand = on; offcommand = off; Changechannel = Kanal; } public void Turnon () {onCommand.execute (); } public void turnoff () {offcommand.execute (); } public void changechannel () {changechannel.execute (); }} // Klassen Client Public Class Client {public static void main (String [] args) {// Befehlsempfängerempfänger tv mytv = new tv (); // Power-On-Befehl ConcreteCommond Commandon on = New Commandon (myTV); // Power-off Command ConcreteCommond Commandoff off = New Commandoff (myTV); // Channel Switching Command ConcreteCommond CommandChange Channel = new commandChange (mytv, 2); // Befehlskontrollobjekt Invoker Control Steuerelement = Neue Steuerung (Ein, Aus, Kanal); // Power-on Control.Turnon (); // Channel Control.changechannel (); // steuerung steuern.turnoff (); }} Ausführungsergebnisse
Der Televisino ist an.
Jetzt ist der TV -Kanal 2
Der Fernseher ist aus.
6. Zusammenfassung
1. Die Essenz des Befehlsmodus besteht darin, den Befehl zu verkörpern und die Verantwortung für die Ausgabe des Befehls und die Verantwortung für die Ausführung des Befehls zu trennen.
2. Jeder Befehl ist eine Operation: Die anforderende Partei stellt eine Anfrage aus, die eine Operation verlangt; Die empfangende Partei erhält die Anfrage und führt den Vorgang durch.
3. Der Befehlsmodus ermöglicht es der anfordernden Partei, unabhängig von der empfangenden Partei zu sein, sodass die anspruchsvolle Partei die Schnittstelle der Partei, die die Anfrage erhält, nicht wissen muss, und es muss auch nicht wissen, wie die Anfrage eingegangen ist, ob, wann und wie die Operation ausgeführt wurde.
4. Der Befehlsmodus macht die Anforderung selbst zu einem Objekt, das wie andere Objekte gespeichert und bestanden werden kann.
5. Der Schlüssel zum Befehlsmodus ist die Einführung einer abstrakten Befehlsschnittstelle und die Absenderprogramme für die abstrakte Befehlsschnittstelle. Nur spezifische Befehle, die die abstrakte Befehlsschnittstelle implementieren, können dem Empfänger zugeordnet werden.
Das obige ist eine detaillierte Einführung in das Java -Befehlsdesignmuster. Ich hoffe, es wird für das Lernen aller hilfreich sein.