1 / 19

Lecture 24: Implementing Commands

Computer Science 313 – Advanced Programming Topics. Lecture 24: Implementing Commands. Command Pattern Decoupling. What we want to do Who does it When it is done. Command Pattern Decoupling. What we want to do Who does it When it is done. Command of Command Pattern.

irving
Download Presentation

Lecture 24: Implementing Commands

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Computer Science 313 – Advanced Programming Topics Lecture 24:Implementing Commands

  2. Command Pattern Decoupling What we want to do Who does it When it is done

  3. Command Pattern Decoupling What we want to do Who does it When it is done

  4. Command of Command Pattern • Command declares method(s) defining actions • Limit to fewest methods • undo included, if desired • Must be abstract type • Interface is possible • Can be abstract class • Terms interchangablefor design purposes

  5. Warning! Warning! Warning!

  6. Warning! Warning! Warning! • Caution is needed if Command is abstract class • All ConcreteCommandsuse fields being declared • Big hint suggesting Command Pattern incorrect • Abstracts what is executed from the code • Should be casting as wide a net as possible • Requiring common details is a rather limited net • Consider using Strategy Pattern may be better • Add fields to Contextclass executing the strategy • Method in strategy passed field as parameter

  7. Command Interface Example • Should be short & simple • Use additional methods if more are needed • Often methods void for maximum usability • Returns value to Receiver in other cases public interface Command {public void execute(); public void undo(); }

  8. Invoker of Command Pattern • Stores Commandinstance(s) • Only refers to interface • May change object held • Changes made externally • Starts action execution • Any reason valid forwhy this happens • Actual execution maybe delayed

  9. Invoker Class Example • Blindly calls executefor correct Command • Select one if multiple Commandsreferred to • Simple class that does not care what happens public class Remote {Command[] btnCommands; void buttonWasPushed(int slot){btnCommands[slot].execute();} }

  10. Receiver in Command Pattern • With ConcreteCommand, performs the action • Real work done by Receiver • Uses Commandtomake & order calls • Independent of Invoker • Lacks knowledge of how it is called • Also called functor or callback

  11. Receiver Class Example • Has methods needed to execute action • Can be written to split work across method public class CDPlayer {boolean powered, trayOpen;public void turnOn() {powered = true; }public void closeTray() {trayOpen = false; } }

  12. ConcreteCommandin Pattern • Calls method(s) in Receiver to perform action • Includes fields it will need • Also acts on own • Separates Invoker &Receiver • Prevents from needing the other • State defines it &its actions

  13. ConcreteCommand Example class LtCommand implements Command {Light bulb;public LtCommand(Light l) { bulb = l;}public void execute() {bulb.turnOn();}public void undo() { if (bulb.on()) { bulb.turnOff(); } else { bulb.turnOn(); }}

  14. MultiCommand Example • Party mode combines multiple Receivers class PartyCommand implements Command { Stereo stereo;public MultiCommand(Stereo s) { stereo = s; }public void execute() {stereo.turnOn();stereo.closeTray();}

  15. ComplexCommand Example • Can also perform actions on its own class OpenCommand implements Command { Application app;public void execute() { String name = askUser(); doc = new Document();app.add(doc);doc.open();}

  16. MacroCommand Example • Define macros which compose Commands class MacroCommand implements Command {ArrayList<Command> cmd;public void addCommand(Command c) {cmd.add(c);}public void execute() { for (Command c : cmd) c.execute();} }

  17. Client in Command Pattern • Helps perform actual action • Works with ConcreteCommand • Sets the Invoker’sCommands • Not involved in execution of actions

  18. Client Class Example • Creates Commandsfor program to use • Gets references to the Receivers • Sets Commandfor the Invokers Command lc = new LtCommand(light);Command sc = new StereoCommand(s); Command mc = new MacroCommand();mc.addCommand(lc);mc.addCommand(sc);remote.setOnCommand(0, lc);remote.setOnCommand(1, sc); remote.setOnCommand(2, mc);

  19. For Next Class • Read remainder of the chapter • Complete command pattern lecture & discussion • How would we go about creating logs of Commands? • Why does CSC351 need this pattern & how is it good? • And what in the world could CSC310 need this work? • Lab #5 on Angel & can rework on Friday • Hopefully, should reuse all your existing code • Retrofit to use pattern by factoring existing code

More Related