Mega Code Archive

 
Categories / Java Tutorial / Design Pattern
 

Command pattern with invoker and receiver

public class TestCommands {   public static void main(String args[]) {     TestCommands t = new TestCommands();   }   public TestCommands() {     Invoker invoker = new Invoker();     Receiver3 asiaServer = new Receiver3();     ShutDownCommand shutDownAsia = new ShutDownCommand(asiaServer);     RebootCommand rebootAsia = new RebootCommand(asiaServer);     invoker.setCommand(shutDownAsia);     invoker.run();     invoker.setCommand(rebootAsia);     invoker.run();     invoker.undo();   } } interface Receiver {   public void connect();   public void diagnostics();   public void reboot();   public void shutdown();   public void disconnect(); } class Invoker {   Command commands[] = new Command[5];   int position;   public Invoker() {     position = -1;   }   public void setCommand(Command c) {     if (position < commands.length - 1) {       position++;       commands[position] = c;     } else {       for (int loopIndex = 0; loopIndex < commands.length - 2; loopIndex++) {         commands[loopIndex] = commands[loopIndex + 1];       }       commands[commands.length - 1] = c;     }   }   public void run() {     commands[position].execute();   }   public void undo() {     if (position >= 0) {       commands[position].undo();     }     position--;   } } class Receiver1 implements Receiver {   public Receiver1() {   }   public void connect() {     System.out.println("connected to 1.");   }   public void diagnostics() {     System.out.println("The receiver 1diagnostics check out OK.");   }   public void shutdown() {     System.out.println("Shutting down the recediver 1.");   }   public void reboot() {     System.out.println("Rebooting the receiver 1.");   }   public void disconnect() {     System.out.println("disconnected from the reciver 1.");   } } class Receiver2 implements Receiver {   public Receiver2() {   }   public void connect() {     System.out.println("connected to the receiver 2.");   }   public void diagnostics() {     System.out.println("The receiver 2 diagnostics check out OK.");   }   public void shutdown() {     System.out.println("Shutting down the receiver 2.");   }   public void reboot() {     System.out.println("Rebooting the receiver 2.");   }   public void disconnect() {     System.out.println("disconnected from the receiver 2.");   } } class Receiver3 implements Receiver {   public Receiver3() {   }   public void connect() {     System.out.println("connected to the receiver 3.");   }   public void diagnostics() {     System.out.println("The receiver 3 diagnostics check out OK.");   }   public void shutdown() {     System.out.println("Shutting down the receiver 3.");   }   public void reboot() {     System.out.println("Rebooting the receiver 3.");   }   public void disconnect() {     System.out.println("disconnected from the receiver 3.");   } } interface Command {   public void execute();   public void undo(); } class RebootCommand implements Command {   Receiver receiver;   public RebootCommand(Receiver r) {     receiver = r;   }   public void execute() {     receiver.connect();     receiver.reboot();     receiver.disconnect();     System.out.println();   }   public void undo() {     System.out.println("Undoing...");     receiver.connect();     receiver.shutdown();     receiver.disconnect();     System.out.println();   } } class ShutDownCommand implements Command {   Receiver receiver;   public ShutDownCommand(Receiver r) {     receiver = r;   }   public void execute() {     receiver.connect();     receiver.shutdown();     receiver.disconnect();   }   public void undo() {     receiver.connect();     receiver.reboot();     receiver.disconnect();   } } class DiagnosticsCommand implements Command {   Receiver receiver;   public DiagnosticsCommand(Receiver r) {     receiver = r;   }   public void execute() {     receiver.connect();     receiver.diagnostics();     receiver.disconnect();     System.out.println("execute");   }   public void undo() {     System.out.println("Undo.");   } }