Command Design Pattern

13
1 Command Design Pattern Rick Mercer and Rice University

description

Command Design Pattern. Rick Mercer and Rice University. 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. General Form. - PowerPoint PPT Presentation

Transcript of Command Design Pattern

Page 1: Command Design Pattern

1

Command Design Pattern

Rick Mercer

and Rice University

Page 2: Command Design Pattern

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

Page 3: Command Design Pattern

General Form

3

Page 4: Command Design Pattern

Example for Heads FirstNote: RemoteLoader loads commands into slots of the remote control

4

Page 5: Command Design Pattern

5

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

Page 6: Command Design Pattern

6

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)

Page 7: Command Design Pattern

7

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

Page 8: Command Design Pattern

8

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

Page 9: Command Design Pattern

9

A UML View of the Sample

Page 10: Command Design Pattern

10

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."); }}

Page 11: Command Design Pattern

11

Code Demo

Need these three files WorkCommand.java CommandClient.java CommandServer.java

Page 12: Command Design Pattern

12

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

Page 13: Command Design Pattern

13

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