CSC/ECE 517 Fall 2012/ch2b 2w40 sn: Difference between revisions
No edit summary |
No edit summary |
||
Line 10: | Line 10: | ||
== A Java Example == | == A Java Example == | ||
[[File:Command.jpg]] | [[File:Command.jpg]] | ||
As the figure above suggests the integral parts of the command pattern are the client,invoker and the receiver.The command part is split into two parts-the interface and the concrete command. The examples are explored more in the below example. | As the figure above suggests the integral parts of the command pattern are the client,invoker and the receiver.The command part is split into two parts-the interface and the concrete command. The examples are explored more in the below example. | ||
This is the command interface which contains the skeleton code of the command pattern containing exactly one method called execute. | This is the command interface which contains the skeleton code of the command pattern containing exactly one method called execute. |
Revision as of 03:28, 17 November 2012
Introduction to Command Pattern
The command pattern is one of the most used behavioral design patterns. The main concept of the pattern is an object which can be used to represent and encapsulate all the information needed to call a method at a later time. This information includes the method name, the object that owns the method and values for the method parameters.
The command pattern has been often associated with these terms client, invoker and receiver. The client instantiates the command object and provides the information required to call the method at a later time. The invoker decides when the method should be called. The receiver is an instance of the class that contains the method's code.
The intent of the Command pattern can be listed as:
- encapsulate a request in an object
- allows the parametrization of clients with different requests
- allows saving the requests in a queue
A Java Example
As the figure above suggests the integral parts of the command pattern are the client,invoker and the receiver.The command part is split into two parts-the interface and the concrete command. The examples are explored more in the below example. This is the command interface which contains the skeleton code of the command pattern containing exactly one method called execute.
//Command public interface Command { public void execute(); }
//Concrete Command public class LightOnCommand implements Command { //reference to the light Light light; public LightOnCommand(Light light) { this.light = light; } public void execute() { light.switchOn(); } }
//Concrete Command public class LightOffCommand implementsCommand { //reference to the light Light light; public LightOffCommand(Light light) { this.light = light; } public void execute() { light.switchOff(); } }
LightOnCommand and LightOffCommand represents the concrete command classes that the client shall use.
Light is the receiver class which contains the commands to be executed.
//Receiver public class Light { private boolean on; public void switchOn() { on = true; } public void switchOff() { on = false; } }
The invoker is the one which actually which calls the execute method of the command class. This also has a accessor method which sets the current command to be executed.
//Invoker public class RemoteControl { private Command command; public void setCommand(Command command) { this.command = command; } public void pressButton() { command.execute(); } }
And finally there is the Client class which will use the commands to switch the lights on and off.
//Client public class Client { public static void main(String[] args) { RemoteControl control = new RemoteControl(); Light light = new Light(); Command lightsOn = new LightsOnCommand(light); Command lightsOff = new LightsOffCommand(light); //switch on control.setCommand(lightsOn); control.pressButton(); //switch off control.setCommand(lightsOff); control.pressButton(); } }