Command Design Pattern Rick Mercer and Rice University












![References n n n [Adelson and Soloway] B. Adelson and E. Soloway. The Role References n n n [Adelson and Soloway] B. Adelson and E. Soloway. The Role](https://slidetodoc.com/presentation_image_h/d5d090639f379985c3b435c7a55ceb67/image-13.jpg)
- Slides: 13
Command Design Pattern Rick Mercer and Rice University 1
Command Design Pattern n 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: Remote. Loader 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 n Polymorphism lets us encapsulate a request for services as an object n n n Establish a method signature name as an interface Vary the algorithms in the called methods 5
Java Examples n Sun used the Command pattern to improve the event model in Java 1. 1 n one example method signature: public void action. Perfomed(Action. Event e) n JButtons and JText. Fields send action. Performed messages to "command" objects (the listeners) without knowing what will happen n Event generators — buttons, text fields, mouse — have listener objects (actually a Vector of listener objects) 6
Uses n The Command object can also be used when you need to tell the program to execute the command later. n n 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 n Log instances by writing the objects to a file n n See Save. Work. Commands. java in the Eclipse project Command. Pattern (command. zip) Like Remote. Loader in HFSP or Client in gen. form Read the objects later and execute them n n See Execute. Saved. Commands. java in the Eclipse project Command. Pattern (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 Work. Command { void execute(); } class Domestic. Engineer implements Work. Command, Serializable { public void execute() { System. out. println("Take out the trash. "); } } class Politician implements Work. Command, Serializable { public void execute() { System. out. println("Take money from the rich, take votes from the poor. "); } } class Programmer implements Work. Command, Serializable { public void execute() { System. out. println("Sell the bugs, charge extra for the fixes. "); } } 10
Code Demo n Need these three files Work. Command. java n Command. Client. java n Command. Server. java n 11
Summary The Command design pattern encapsulates the concept of a command into an object n A command object could be sent across a network to be executed elsewhere or it could be saved as a log of operations n 12
References n n n [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/Java. Resources/Design. Patterns/comman d. htm 13