command,將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化;對請求排隊或記錄請求日誌,以及支援可撤銷的操作。
在了解命令模式的時候,需要先了解乙個設計原則——敏捷開發原則:
不要為**新增基於猜測的、實際不需要的功能。如果不清楚乙個系統是否需要命令模式,一般就不要著急去實現它,事實上,在需要的時候通過重構實現這個模式並不困難,只有在真正需要如撤銷
/恢復操作等功能時,把原來的**重構為命令模式才有意義。
第一,能較容易地設計乙個命令佇列;
第二,在需要的情況下,可以較容易地將命令記入日記;
第三,允許接受請求的一方決定是否要否決請求;
第四,可以容易地實現對請求的撤銷和重做;
第五,由於加進新的具體命令類不影響其他的類,因此增加新的具體,命令很容易。
第六,命令模式把請求乙個操作的物件與知道怎麼執行乙個操作的物件分開(最關鍵)
使用命令模式可能會導致某些系統有過多的具體命令類。因為針對每乙個命令都需要設計乙個具體命令類,因此某些系統可能需要大量具體命令類,這將影響命令模式的使用。
1.系統需要將請求呼叫者和請求接收者解耦,使得呼叫者和接收者不直接互動。
2.系統需要在不同的時間指定請求、將請求排隊和執行請求。
3.系統需要支援命令的撤銷
(undo)
操作和恢復
(redo)
操作。
4.系統需要將一組操作組合在一起,即支援巨集命令。
/// /// 建立具體命令並設定它的接收者
///
class program
}/// /// 用來宣告執行操作的介面
///
abstract class command
abstract public void execute();
}/// /// 將乙個接收者物件繫結於乙個動作,呼叫接收者相應的操作,以實現execute
///
class concretecommand :command
public override void execute()
}/// /// 要求該命令執行這個請求
///
class invoker
public void executecommand()
}/// /// 知道如何實施與執行乙個請求相關的操作,任何類都可能作為要給接收者
///
class receiver
}
設計模式 命令設計模式
一句話總結 命令設計模式的實質是將命令定義,命令的執行分離開,從而提公升了系統的解藕性 結構 命令的抽象command 命令的具體實現concretecommand 命令處理者抽象ireceiver 命令處理者的具體實現concretereceiver 命令的呼叫者invoker 客戶端client...
設計模式 命令模式
1 命令模式的角色組成 1 命令角色 command 生命執行操作的介面。介面或抽象類來實現。2 具體命令角色 concrete command 將乙個接收者物件繫結於乙個動作 呼叫接收者相應的操作,以實現命令角色宣告的執行操作的介面。3 客戶角色 client 建立乙個具體命令物件 並可以設定它的...
設計模式 命令模式
1 command.h ifndef command h define command h include include include using namespace std class chef 廚師,具體命令的執行者 class command 命令基類 class makemuttonco...