定義
命令模式(Command Pattern)是對(duì)命令的封裝狈网,每一個(gè)命令都是一個(gè)操作:請(qǐng)求的一方發(fā)出請(qǐng)求要求執(zhí)行一個(gè)操作;接收的一方收到請(qǐng)求笨腥,并執(zhí)行操作拓哺。命令模式解耦了請(qǐng)求方和接收方,請(qǐng)求方只需請(qǐng)求執(zhí)行命令脖母,不用關(guān)心命令是怎樣被接收士鸥,怎樣被操作以及是否被執(zhí)行...等。
本質(zhì):解耦命令請(qǐng)求與處理谆级。
屬于行為型模式烤礁。
適用場(chǎng)景
- 現(xiàn)實(shí)語(yǔ)義中具備“命令”的操作(如命令菜單,shell命令...)肥照。
- 請(qǐng)求調(diào)用者和請(qǐng)求的接收者需要解耦脚仔,使得調(diào)用者和接收者不直接交互。
- 需要抽象出等待執(zhí)行的行為建峭,比如撤銷(Undo)操作和恢復(fù)(Redo)等操作玻侥。
- 需要支持命令宏(即命令組合操作)。
舉例
- JDK Runnable
- JUnit Test
- 系統(tǒng)控制臺(tái)cmd
優(yōu)點(diǎn)
- 通過引入中間件(抽象接口)亿蒸,解耦了命令請(qǐng)求與實(shí)現(xiàn)。
- 擴(kuò)展性良好掌桩,可以很容易地增加新命令边锁。
- 支持組合命令,支持命令隊(duì)列波岛。
- 可以在現(xiàn)有命令的基礎(chǔ)上茅坛,增加額外功能(比如日志記錄...,結(jié)合裝飾器模式更佳)。
缺點(diǎn)
- 具體命令類可能過多贡蓖。
- 增加了程序的復(fù)雜性曹鸠,理解更加困難。