日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【设计模式】命令模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

發布時間:2025/6/17 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【设计模式】命令模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、命令模式簡介
  • 二、命令模式 適用場景
  • 三、命令模式 優缺點
  • 四、命令模式 與 備忘錄模式
  • 五、命令模式 代碼示例
    • 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();} }

執行結果 :

總結

以上是生活随笔為你收集整理的【设计模式】命令模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。