【设计模式】命令模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
文章目錄
- 一、命令模式簡(jiǎn)介
- 二、命令模式 適用場(chǎng)景
- 三、命令模式 優(yōu)缺點(diǎn)
- 四、命令模式 與 備忘錄模式
- 五、命令模式 代碼示例
- 1、命令接口
- 2、發(fā)布命令類
- 3、關(guān)閉命令類
- 4、游戲類
- 5、命令執(zhí)行者類
- 6、測(cè)試類
一、命令模式簡(jiǎn)介
命令模式 : 將 不同的請(qǐng)求 封裝成 不同的請(qǐng)求對(duì)象 , 以便 使用 不同的 請(qǐng)求 ; 對(duì)于接收者來說 , 可以識(shí)別 不同的 請(qǐng)求對(duì)象類型 , 然后執(zhí)行 不同的操作 ;
命令模式 , 解決了 應(yīng)用程序 中 , 對(duì)象的職責(zé) ( 發(fā)送請(qǐng)求 / 執(zhí)行請(qǐng)求 ) , 以及它們之間的 通信方式 ;
命令模式 可以使 命令的 發(fā)送者 和 接收者 完全解耦 ; 發(fā)送者 和 接收者 之間 , 并沒有直接的關(guān)系 , 二者靠 命令 進(jìn)行交互 ;
命令發(fā)送者 只需要知道發(fā)送 請(qǐng)求對(duì)象 , 不需要知道如何完成請(qǐng)求 ;
命令執(zhí)行者 只需要知道如何 完成請(qǐng)求 , 不需要知道請(qǐng)求的發(fā)送過程 ;
命令模式類型 : 行為型 ;
二、命令模式 適用場(chǎng)景
命令模式 適用場(chǎng)景 :
- 解耦發(fā)送者與接收者 : 請(qǐng)求發(fā)送者 和 請(qǐng)求接收者 ( 執(zhí)行者 ) 需要 解耦 , 發(fā)送者 與 接收者 之間 不直接進(jìn)行交互 ;
- 抽象行為 : 需要將 等待執(zhí)行 的行為 抽象出來 ;
三、命令模式 優(yōu)缺點(diǎn)
命令模式 優(yōu)點(diǎn) :
- 降低耦合 : 將 請(qǐng)求 調(diào)用者 與 請(qǐng)求 接收者 進(jìn)行 解耦 ;
- 擴(kuò)展性高 : 如果要 擴(kuò)展新命令 , 直接 定義 新的命令對(duì)象 即可 ; 如果要 執(zhí)行一組命令 , 發(fā)送一組命令 給接收者 即可 ;
命令模式 缺點(diǎn) :
- 增加復(fù)雜度 : 擴(kuò)展命令 會(huì) 導(dǎo)致 類的數(shù)量增加 , 增加了 系統(tǒng)實(shí)現(xiàn)的復(fù)雜程度 ;
需要針對(duì)每個(gè)命令 , 都要開發(fā)一個(gè)與之對(duì)應(yīng)的命令類 ;
四、命令模式 與 備忘錄模式
命令模式 與 備忘錄模式 : 可以通過 備忘錄模式 保存 命令模式 的 命令 歷史記錄 , 可以獲取 上一個(gè)命令 , 之前的某幾個(gè)命令 等 ,
五、命令模式 代碼示例
命令模式 的 核心 就是 將 命令 抽象成一個(gè)對(duì)象 ;
業(yè)務(wù)場(chǎng)景 :
游戲的 發(fā)布 和 關(guān)閉 , 使用命令模式實(shí)現(xiàn) , 分別針對(duì) 發(fā)布 , 關(guān)閉 , 各自定義一個(gè)命令類 ;
1、命令接口
package command;/*** 命令接口* 所有的命令都要實(shí)現(xiàn)該接口*/ public interface Command {/*** 執(zhí)行命令方法*/void execute(); }
2、發(fā)布命令類
package command;/*** 開放命令* 實(shí)現(xiàn) Command 接口* 該類代表了一種命令*/ public class OpenCommand implements Command{private Game game;public OpenCommand(Game game) {this.game = game;}@Overridepublic void execute() {this.game.open();} }
3、關(guān)閉命令類
package command;/*** 關(guān)閉命令*/ public class CloseCommand implements Command {private Game game;public CloseCommand(Game game) {this.game = game;}@Overridepublic void execute() {this.game.close();} }
4、游戲類
package command;/*** 該類與命令執(zhí)行的具體邏輯相關(guān)*/ public class Game {private String name;public Game(String name) {this.name = name;}public void open() {System.out.println(this.name + " 開放");}public void close() {System.out.println(this.name + " 關(guān)閉");} }
5、命令執(zhí)行者類
package command;import java.util.ArrayList;/*** 命令接收者* 執(zhí)行命令*/ public class Manager {/*** 存放命令*/private ArrayList<Command> commands = new ArrayList<>();/*** 添加命令* @param command*/public void addCommand(Command command) {commands.add(command);}/*** 執(zhí)行命令*/public void executeCommand() {for (Command command : commands) {// 逐個(gè)遍歷執(zhí)行命令command.execute();}// 命令執(zhí)行完畢后 , 清空集合commands.clear();} }
6、測(cè)試類
package command;public class Main {public static void main(String[] args) {Game game = new Game("Game 01");OpenCommand openCommand = new OpenCommand(game);CloseCommand closeCommand = new CloseCommand(game);// 發(fā)送命令Manager manager = new Manager();manager.addCommand(openCommand);manager.addCommand(closeCommand);// 執(zhí)行命令manager.executeCommand();} }
執(zhí)行結(jié)果 :
總結(jié)
以上是生活随笔為你收集整理的【设计模式】命令模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【设计模式】中介者模式 ( 简介 | 适
- 下一篇: 【设计模式】备忘录模式 ( 简介 | 适