14-CommandDesignPattern

advertisement
Command Design Pattern
Rick Mercer
and Rice University
1
Command Design Pattern

The Command Pattern encapsulates a
request as an object, thereby letting you
parameterize other objects with different
requests, queue or log requests, and support
undoable operations.
2
General Form
3
Example for Heads First
Note: RemoteLoader loads commands into slots of the remote control
4
Command Pattern
One object can send messages to other
objects without knowing anything about the
actual operation or the type of object
 Polymorphism lets us encapsulate a request
for services as an object


Establish a method signature name as an
interface

Vary the algorithms in the called methods
5
Java Examples

Sun used the Command pattern to improve the
event model in Java 1.1

one example method signature:
public void actionPerfomed(ActionEvent e)
 JButtons and JTextFields send actionPerformed
messages to "command" objects (the listeners) without
knowing what will happen

Event generators — buttons, text fields, mouse —
have listener objects (actually a Vector of listener
objects)
6
Uses

The Command object can also be used
when you need to tell the program to
execute the command later.


In such cases, you are saving commands as
objects to be executed later
You could also sending command objects
over the network (in new project) or save
them in a collection class such as a Stack
for undo/redo operations
7
Example we saw before was
Command
Make 3 command classes
 Log instances by writing the objects to a file




See SaveWorkCommands .java in the Eclipse project
CommandPattern (command.zip)
Like RemoteLoader in HFSP or Client in gen. form
Read the objects later and execute them


See ExecuteSavedCommands .java in the Eclipse
project CommandPattern (command.zip)
Like Light on HFSP or Receiver in gen. form
8
A UML View of the Sample
9
import java.io.Serializable;
// Command design pattern - Decoupling producer from consumer.
public interface WorkCommand {
void execute();
}
class DomesticEngineer implements WorkCommand, Serializable {
public void execute() {
System.out.println("Take out the trash.");
}
}
class Politician implements WorkCommand, Serializable {
public void execute() {
System.out.println("Take money from the rich, take votes from the poor.");
}
}
class Programmer implements WorkCommand, Serializable {
public void execute() {
System.out.println("Sell the bugs, charge extra for the fixes.");
}
}
10
Code Demo

Need these three files
WorkCommand.java
 CommandClient.java
 CommandServer.java

11
Summary
The Command design pattern encapsulates
the concept of a command into an object
 A command object could be sent across a
network to be executed elsewhere or it
could be saved as a log of operations

12
References






[Adelson and Soloway] B. Adelson and E. Soloway. The Role of
Domain Experience in Software Design. IEEE Trans. on Software
Engineering, V SE-11, N 11, 1985, pp. 1351-1360.
[Linn and Clancy] M. Linn and M. Clancy, The Case for Case
Studies of Programming Problems. Communications of the ACM V 35
N 3, March 1992, pp. 121-132.
[Soloway and Ehrlich] E. Soloway and K. Ehrlich, Empirical Studies
of Programming Knowledge, IEEE Transactions on Software
Engineering V SE-10, N 5, September 1984.
[Curtis] B. Curtis, Cognitive Issues in Reusing Software Artifacts. In
Software Reusability, V II. ed. T. Biggerstaff and A. Perlis, Addison
Wesley 1989, pp. 269-287.
[Sierra and Bates ], Heads First Design Patterns
http://www.exciton.cs.rice.edu/JavaResources/DesignPatterns/comman
d.htm
13
Download