命令模式(Command) 將一個請求封裝爲一個對象,從而使你可用不一樣的請求對客戶進行參數 化;對請求排隊和日誌,以及支持可撤銷的操做。java
類型:形爲型模式 git
順口溜:中訪策備迭 觀模命狀職解github
package com.amosli.dp.behavior.command; public abstract class Command { protected Receiver invoker; public Command(Receiver invoker) { this.invoker = invoker; } public abstract void execute(); } package com.amosli.dp.behavior.command; public class ConcreteCommand extends Command { public ConcreteCommand(Receiver invoker) { super(invoker); } @Override public void execute() { invoker.action(); } } package com.amosli.dp.behavior.command; import java.util.ArrayList; import java.util.List; public class Invoker { private List<Command> commands = new ArrayList<Command>(); public void add(Command command){ commands.add(command); } public void remove(Command command){ commands.remove(command); } public void inform(){ for (Command command : commands) { command.execute(); } } } package com.amosli.dp.behavior.command; public class Receiver { public void action(){ System.out.println("執行了這個操做。"); } }
1).下降對象之間的耦合度。ide
2).新的命令能夠很容易地加入到系統中。this
3).能夠比較容易地設計一個組合命令。spa
4).調用同一方法實現不一樣的功能設計
使用命令模式可能會致使某些系統有過多的具體命令類。由於針對每個命令都須要設計一個具體命令類,所以某些系統可能須要大量具體命令類,這將影響命令模式的使用。日誌
本系列文章源碼地址,https://github.com/amosli/dp 歡迎Fork & Star !!code