定义:命令模式可以将请求封装在一个对象中,允许你可以像管理对象一样管理方法,传递并在合适的时机调用他们。
Command模式可应用于
a)整个调用过程比较繁杂,或者存在多处这种调用。这时,使用Command类对该调用加以封装,便于功能的再利用。
b)调用前后需要对调用参数进行某些处理。
c)调用前后需要进行某些额外处理,比如日志,缓存,记录历史操作等。
Command模式有如下效果:
a)将调用操作的对象和知道如何实现该操作的对象解耦。
b)Command是头等对象。他们可以像其他对象一样被操作和扩展。
c)你可将多个命令装配成一个符合命令。
d)增加新的Command很容易,因为这无需改变现有的类。
代码实例如下:
public abstract class Command {
protected Receiver receiver;
public Command(Receiver receiver){
this.receiver = receiver;
}
public abstract void ExecuteCommand();
}
public class ConcreteCommand extends Command {
public ConcreteCommand(Receiver receiver){
super(receiver);
}
@Override
public void ExecuteCommand() {
receiver.Execute();
}
}
public class Invoker {
private Command command;
public void setOrder(Command command) {
this.command = command;
}
public void ExecuteCommand() {
command.ExecuteCommand();
}
}
public class Receiver {
public void Execute(){
System.out.println("Receiver excute!");
}
}
public class Client {
public static void main(String[] args) {
Receiver r = new Receiver();
Command c = new ConcreteCommand(r);
Invoker i = new Invoker();
i.setOrder(c);
i.ExecuteCommand();
}
}
上面代码实例中,Command抽象类把命令实现者封装起来,ConcreteCommand类具体实现Command抽象类,Receiver类是命令的实现者的实现方式,Invoker类是命令调用者在这个类中通过Command类的间接作用调用命令实现者Receiver类的方法,真正的实现了命令请求者和命令实现者的解耦,方便对命令进行控制。