定義:將一個請求封裝爲一個對象,從而使你可用不同的請求對客戶進行參數化,可以對請求排隊或記錄請求日誌,以及支持可撤銷的操作。
代碼:
package command_model;
/**
* @author naivor
* 命令模式-場景類
*/
public class CommandModel {
public static void main(String[] args) {
Receiver receiver=new Receiver();
Command command=new ConcreteCommand(receiver);
Invoker invoker=new Invoker();
invoker.SetCommand(command);
invoker.ExecuteCommand();
}
}
/**
*
* @author naivor
* 命令模式-命令抽象類
*/
abstract class Command{
protected Receiver receiver;
public Command() {
}
public Command(Receiver receiver) {
this.receiver=receiver;
}
public abstract void execute();
}
/**
*
* @author naivor
* 命令模式-具體命令類
*/
class ConcreteCommand extends Command{
public ConcreteCommand(Receiver receiver) {
super(receiver);
}
@Override
public void execute() {
receiver.action();
}
}
/**
*
* @author naivor
* 命令模式-接收者類
*/
class Receiver{
public void action(){
//業務邏輯
}
}
/**
*
* @author naivor
* 命令模式-命令管理類
*/
class Invoker{
private Command command;
public void SetCommand(Command command){
this.command=command;
}
public void ExecuteCommand(){ //還可以擴展出 "撤銷/恢復"等功能
command.execute();
}
}