14 CommandDesignPattern
14 CommandDesignPattern
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
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;
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/
command.htm
13