定义
* 命令模式又称为行动(Action)模式或交易(Transaction)模式
* 命令模式把一个请求或者操作封装到一个对象中
* 命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能
优点
1.降低对象之间的耦合度。
2.新的命令可以很容易地加入到系统中。
3.可以比较容易地设计一个组合命令。
4.调用同一方法实现不同的功能
缺点
使用命令模式可能会导致某些系统有过多的具体命令类
因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用
入门案例:
UML图解:
代码:
Command:
//抽象命令
abstract public class Command {
protected Receiver receiver; //命令执行者
private String command; //命令
public Command(Receiver receiver, String command) {
this.receiver = receiver;
this.command = command;
}
/**
* 抽象方法
*/
abstract public void execute();
public String getCommand() {
return command;
}
public void setCommand(String command) {
this.command = command;
}
}
LsfCommand:
//具体命令(请求)
public class LsfCommand extends Command {
public LsfCommand(Receiver receiver) {
super(receiver, "螺蛳粉");
}
@Override
public void execute() {
receiver.action( getCommand() );
}
}
NrcCommand:
//具体命令(请求)
public class NrcCommand extends Command {
public NrcCommand(Receiver receiver) {
super(receiver, "牛肉串");
}
@Override
public void execute() {
receiver.action( getCommand() );
}
}
Receiver:
//请求处理者
public class Receiver {
public void action(String command){
System.out.println("好的,现在就给你做" + command);
}
}
Invoke:
//命令执行者
public class Invoker {
private Command command;
public Invoker(Command command){
this.command = command;
}
public void execiteCommand(){
this.command.execute();
}
public Command getCommand() {
return command;
}
public void setCommand(Command command) {
this.command = command;
}
}
Client(测试):
public class Main {
public static void main(String[] args){
Receiver receiver = new Receiver(); //请求处理者
Command command = new LsfCommand( receiver ); //螺蛳粉命令(具体请求)
Invoker invoker = new Invoker( command ); //执行命令者
invoker.execiteCommand(); //落实执行具体的命令
Command command2 = new NrcCommand( receiver ); //牛肉串粉命令(具体请求)
invoker.setCommand( command2 );
invoker.execiteCommand();
/**
* output:
好的,现在就给你做螺蛳粉
好的,现在就给你做牛肉串
*/
}
}
以上内容均源自网络再加以修改