Command命令模式: Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数。将一个请求封装为一个对象,从而使你不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
在此写了7个java类来描述说明Command设计模式的实现方式;
1、 Control.java 命令控制者对象类 (命令控制器在这里至关重要,相当于遥控器的作用)
2、 Tv.java 命令接收者对象类
3、 Command.java 命令接口类
4、 CommandChannel.java 频道切换命令类
5、 CommandOff.java 关机命令类
6、 CommandOn.java 开机命令类
7、 CommandTest.java 带有main方法的测试类(命令发送者)
如下所示:
package lucene.kameilong.conmmand;
public class TV {
private int currentChanl = 0;
public void trunOn() {
System.out.println("TV is turnning on......");
}
public void trunOff() {
System.out.println("TV is turnning off......");
}
public void changeChanl(int chanl) {
this.currentChanl = chanl;
System.out.println("Now TV chanle is " + currentChanl + "......");
}
}
package lucene.kameilong.conmmand;
public class OnCommand implements Command {
private TV myTv;
public OnCommand(TV tv) {
this.myTv = tv;
}
public void excute() {
myTv.trunOn();
}
}
package lucene.kameilong.conmmand;
public interface Command {
public void excute();
}
package lucene.kameilong.conmmand;
public class CommandTest {
public static void main(String[] args) {
TV myTv = new TV();
OnCommand on = new OnCommand(myTv);
OffCommand off = new OffCommand(myTv);
ChangeCommand change = new ChangeCommand(myTv, 3);
Control control = new Control(on, off, change);
control.turnOn();
control.chageChanl();
control.turnOff();
}
}
package lucene.kameilong.conmmand;
public class OffCommand implements Command {
private TV myTv;
public OffCommand(TV tv) {
this.myTv = tv;
}
public void excute() {
myTv.trunOff();
}
}
package lucene.kameilong.conmmand;
public class ChangeCommand implements Command {
private TV myTv;
private int chanl;
public ChangeCommand(TV tv, int chanl) {
this.myTv = tv;
this.chanl = chanl;
}
public void excute() {
myTv.changeChanl(chanl);
}
}
package lucene.kameilong.conmmand;
public class Control {
private Command on, off, change;
public Control(OnCommand on, OffCommand off, ChangeCommand change) {
this.on = on;
this.off = off;
this.change = change;
}
public void turnOn() {
on.excute();
}
public void turnOff() {
off.excute();
}
public void chageChanl() {
change.excute();
}
}