命令模式
<設計模式其實很簡單>筆記
將一個請求封裝爲一個對象,從而使用戶可用不同的請求對客戶進行參數化。對請求排隊或記錄請求日誌,並支持可撤銷的操作。
//抽象命令
public abstract class Command{
protected Receiver receiver;
//構造函數
public Command(Receiver receiver){
this.receiver = receiver;
}
//抽象的執行命令方法
abstract public void Execute();
}
//具體命令
public void class ConcreteCommand extends Command{
public ConcreteCommand(Receiver receiver){
super(receiver);
}
//覆蓋執行方法
//執行命令方法
@Override
public void Execute(){
receiver.Action();
}
}
//命令傳達類
public class Invoker{
private Command command;
//設定命令
public void setCommand(Command command){
this.command = command;
}
//執行命令
public void ExecuteCommand(){
command.Execute();
}
}
//命令執行者
public class Receiver{
//行動方法
public void Action(){
System.out.println("execute the request");
}
}
//客戶端
public static void main(String[] args){
Receiver receiver = new Receiver();
Command command = new ConcreteCommand(receiver);
Invoker invoker = new Invoker();
invoker.setCommand(command);
invoker.ExecuteCommand();
}
//命令模式本質就是對命令進行封裝,並且將發出命令的責任和執行命令的責任分割開。不過每個命令都要有一個類
③適用的地方:
當需要抽象出待執行的動作以便參數化某個對象時。
當需要在不同的時刻執行、排列一級執行請求時。
當系統需要支持取消操作時。
當系統需要記錄、修改日誌時
④優點:
降低了系統的耦合度
新的命令可以很容易地加入到當前系統中
可以比較容易地設計一個命令隊列和組合命令。
可以方便地實現對請求的撤銷和重做。