應用:線程池、日程安排(Scheduler)怎顾、工作隊列读慎。
解耦,通過命令來解耦請求者和執(zhí)行者槐雾, 請求者 ->命令 -> 執(zhí)行者
實現(xiàn):請求者執(zhí)行命令贪壳,調用命令的execute()方法,命令繼承封裝執(zhí)行者蚜退,調用執(zhí)行者的具體方法闰靴。
命令的撤銷
宏命令:一個命令執(zhí)行多個命令
隊列請求:日程安排、線程池钻注、工作隊列
命令模式將發(fā)出請求的對象和執(zhí)行請求的對象解耦蚂且。
在被解耦的兩者之間是通過命令對象進行溝通的,命令對象封裝了接收者和一個活一組動作幅恋。
調用這通過調用命令對象execute()發(fā)出請求杏死,這會使得接受者的動作被調用。
調用者可以接受命令當作參數(shù)捆交,甚至在運行時動態(tài)的執(zhí)行淑翼。
命令可以支持撤銷,做法是實現(xiàn)一個undo()方法來回到execute()被執(zhí)行前的狀態(tài)品追。
宏命令是命令的一種簡單的延申玄括,允許調用多個命令。宏方法也支持撤銷肉瓦。
實際操作時遭京,很常見使用“聰明”命令對象胃惜,也就是直接實現(xiàn)了請求,而不是將工作委托給接收者哪雕。
命令也可以用來實現(xiàn)日志和事務系統(tǒng)船殉。
public interface Command{
public void execute();
}
public class ConcreteCommand{
RealPerformer realPerformer;
public ConcreteCommand(RealPerformer realPerformer){
this.realPerformer = realPerformer;
}
public void execute(){
realPerformer.doAction();
}
}
public class Requester{
Command command;
public Requester(ConcreteCommand command){
this.command= command;
}
public void request(){
command.execute();
}
}