命令模式(別名:動作,事務)
將一個請求封裝為一個對象,從而使用戶可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日志,心腹支持可撤銷的操作。
Receiver(接收者):接收者是一個類的實例,該實例負責執行與請求相關的操作。
Command(命令)接口:命令是一個接口,規定了用來封裝“請求”的若干個方法,比如execute()、undo()等方法.
ConcreteCommand(具體命令):是實例命令接口的類的實例。具體命令必須實現命令接口中的方法,比如execute()方法,使該方法封裝一個“請求”。
Invoker(請求者):是一個包含Command接口變量的類的實例。請求者中的Command接口的變量可以存放任何具體命令的引用。請求者負責調用具體命令,讓具體命令執行那些封裝了“請求”的方法,比如execute()方法。
?
- 使用
-
接收者(Receive)??? Company.java
public class CompanyArmy{ public void sneakAttack(){ System.out.println("我們知道如何偷襲敵人,保證完成任務"); } }
? -
命令(Command)接口
public interface Command { public void execute(); }
? -
具體命令(ConcreteCommand)
public class ConcreteCommand implements Command { CompanyArmy army;//含有接收者的引用 ConcreteCommand(CompanyArmy army){ this.army = army; } public void execute() {//封裝著指揮官的請求 army.sneakAttack(); } }
? -
請求者(Invoker)
public class ArmySuperior { Command command; public void setCommand(Command command){ this.command = command; } public void startExecuteCommand(){//讓具體命令執行execute方法 command.execute(); } }
? -
模式的使用
public class Main { /** * @param args */ public static void main(String[] args) { //創建接收者 CompanyArmy ca = new CompanyArmy(); //創建具體命令并指定接收者 Command command = new ConcreteCommand(ca); //創建命令的請求者 ArmySuperior commander = new ArmySuperior(); commander.setCommand(command); commander.startExecuteCommand(); } }
- 適合使用命令模式:
- 程序需要在不現時刻指定、排序和執行請求
- 程序需要提供撤銷操作
- 程序需要支持宏操作?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
