//执行命令的接口 public interface Command { void execute(); }然后定义命令的接受者Tv:
//命令接收者Receiver public class Tv { public int currentChannel = 0;//当前频道 public void turnOn() {//开机 System.out.println("The televisino is on."); } public void turnOff() { //关机 System.out.println("The television is off."); } public void changeChannel(int channel) {//换台 this.currentChannel = channel; System.out.println("Now TV channel is " + channel); } }
之后定义开机、关机和换台的命令实现:
//开机命令ConcreteCommand public class CommandOn implements Command { private Tv myTv;//持有一个命令接受者的引用 public CommandOn(Tv tv) { //构造方法 myTv = tv; } public void execute() { //执行命令的方法 myTv.turnOn(); } }
//关机命令ConcreteCommand public class CommandOff implements Command { private Tv myTv; public CommandOff(Tv tv) { myTv = tv; } public void execute() { myTv.turnOff(); } }
//频道切换命令ConcreteCommand public class CommandChange implements Command { private Tv myTv; private int channel; public CommandChange(Tv tv, int channel) { myTv = tv; this.channel = channel; } public void execute() { myTv.changeChannel(channel); } }
//可以看作是遥控器Invoker public class Control { private Command onCommand, offCommand, changeChannel;//持有三种命令的引用 public Control(Command on, Command off, Command channel) {//构造方法 onCommand = on; offCommand = off; changeChannel = channel; } public void turnOn() { onCommand.execute(); } public void turnOff() { offCommand.execute(); } public void changeChannel() { changeChannel.execute(); } }最后编写测试类:
//测试类Client public class Client { public static void main(String[] args) { // 命令接收者Receiver Tv myTv = new Tv(); //初始化开机命令ConcreteCommond CommandOn on = new CommandOn(myTv); //初始化关机命令ConcreteCommond CommandOff off = new CommandOff(myTv); //初始化频道切换命令ConcreteCommond CommandChange channel = new CommandChange(myTv, 2); //初始化命令控制对象Invoker Control control = new Control(on, off, channel); // 通过遥控器可以实现三个命令操作。 // 开机 control.turnOn(); // 切换频道 control.changeChannel(); // 关机 control.turnOff(); } }结果如下: