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

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