【设计模式】命令模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
生活随笔
收集整理的這篇文章主要介紹了
【设计模式】命令模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、命令模式簡介
- 二、命令模式 適用場景
- 三、命令模式 優缺點
- 四、命令模式 與 備忘錄模式
- 五、命令模式 代碼示例
- 1、命令接口
- 2、發布命令類
- 3、關閉命令類
- 4、游戲類
- 5、命令執行者類
- 6、測試類
一、命令模式簡介
命令模式 : 將 不同的請求 封裝成 不同的請求對象 , 以便 使用 不同的 請求 ; 對于接收者來說 , 可以識別 不同的 請求對象類型 , 然后執行 不同的操作 ;
命令模式 , 解決了 應用程序 中 , 對象的職責 ( 發送請求 / 執行請求 ) , 以及它們之間的 通信方式 ;
命令模式 可以使 命令的 發送者 和 接收者 完全解耦 ; 發送者 和 接收者 之間 , 并沒有直接的關系 , 二者靠 命令 進行交互 ;
命令發送者 只需要知道發送 請求對象 , 不需要知道如何完成請求 ;
命令執行者 只需要知道如何 完成請求 , 不需要知道請求的發送過程 ;
命令模式類型 : 行為型 ;
二、命令模式 適用場景
命令模式 適用場景 :
- 解耦發送者與接收者 : 請求發送者 和 請求接收者 ( 執行者 ) 需要 解耦 , 發送者 與 接收者 之間 不直接進行交互 ;
- 抽象行為 : 需要將 等待執行 的行為 抽象出來 ;
三、命令模式 優缺點
命令模式 優點 :
- 降低耦合 : 將 請求 調用者 與 請求 接收者 進行 解耦 ;
- 擴展性高 : 如果要 擴展新命令 , 直接 定義 新的命令對象 即可 ; 如果要 執行一組命令 , 發送一組命令 給接收者 即可 ;
命令模式 缺點 :
- 增加復雜度 : 擴展命令 會 導致 類的數量增加 , 增加了 系統實現的復雜程度 ;
需要針對每個命令 , 都要開發一個與之對應的命令類 ;
四、命令模式 與 備忘錄模式
命令模式 與 備忘錄模式 : 可以通過 備忘錄模式 保存 命令模式 的 命令 歷史記錄 , 可以獲取 上一個命令 , 之前的某幾個命令 等 ,
五、命令模式 代碼示例
命令模式 的 核心 就是 將 命令 抽象成一個對象 ;
業務場景 :
游戲的 發布 和 關閉 , 使用命令模式實現 , 分別針對 發布 , 關閉 , 各自定義一個命令類 ;
1、命令接口
package command;/*** 命令接口* 所有的命令都要實現該接口*/ public interface Command {/*** 執行命令方法*/void execute(); }
2、發布命令類
package command;/*** 開放命令* 實現 Command 接口* 該類代表了一種命令*/ public class OpenCommand implements Command{private Game game;public OpenCommand(Game game) {this.game = game;}@Overridepublic void execute() {this.game.open();} }
3、關閉命令類
package command;/*** 關閉命令*/ public class CloseCommand implements Command {private Game game;public CloseCommand(Game game) {this.game = game;}@Overridepublic void execute() {this.game.close();} }
4、游戲類
package command;/*** 該類與命令執行的具體邏輯相關*/ 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 + " 關閉");} }
5、命令執行者類
package command;import java.util.ArrayList;/*** 命令接收者* 執行命令*/ public class Manager {/*** 存放命令*/private ArrayList<Command> commands = new ArrayList<>();/*** 添加命令* @param command*/public void addCommand(Command command) {commands.add(command);}/*** 執行命令*/public void executeCommand() {for (Command command : commands) {// 逐個遍歷執行命令command.execute();}// 命令執行完畢后 , 清空集合commands.clear();} }
6、測試類
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);// 發送命令Manager manager = new Manager();manager.addCommand(openCommand);manager.addCommand(closeCommand);// 執行命令manager.executeCommand();} }
執行結果 :
總結
以上是生活随笔為你收集整理的【设计模式】命令模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【设计模式】中介者模式 ( 简介 | 适
- 下一篇: 【设计模式】备忘录模式 ( 简介 | 适