Command模式(命令)
Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循一定的编程模式,才能使自己的代码便于理解,易于交流,Command(命令模式)模式是比较常用的一个模式.
Command命令模式: 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方法的测试类(命令发送者)
=============== 1、 Control.java
package command;
//命令控制者
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();
}
}
=============== 1 end
=============== 2、 Tv.java
package command;
//命令接收者
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);
}
}
=============== 2 end
=============== 3、 Command.java
package command;
//命令接口
public interface Command {
void execute();
}
=============== 3 end
=============== 4、 CommandChannel.java
package command;
//频道切换命令
public class CommandChannel implements Command {
private Tv myTv;
private int channel;
public CommandChannel(Tv tv, int channel) {
myTv = tv;
this.channel = channel;
}
public void execute() {
myTv.changeChannel(channel);
}
}
=============== 4 end
=============== 5、 CommandOff.java
package command;
//关机命令
public class CommandOff implements Command {
private Tv myTv;
public CommandOff(Tv tv) {
myTv = tv;
}
public void execute() {