Design Pattern Java Tutorial

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