1、定義:
將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日誌,以及支援可撤消的操作。[GOF 《設計模式》]
2、角色
Command——用來執行操作的介面。
CreateCommand——將一個接收者對象綁定一個動作,並實現執行命令操作。
Invoker——要求該命令執行。
Receiver——知道如何實施與執行一個與請求相關的操作,任何類都可作為一個接收者。
3、模型
Command
abstract class Command { protected Receiver receiver; public Command(Receiver creceiver) { this.receiver = creceiver; } abstract public void Execute(); }
CreateCommand
class CreateCommand : Command { public CreateCommand(Receiver receiver) : base(receiver) { } public override void Execute() { receiver.Action(); } }
Receiver
class Receiver { public void Action() { Console.WriteLine("執行命令"); } }
Invoker
class Invoker { private Command command; public void SetCommand(Command command) { this.command = command; } public void ExecuteCommand() { command.Execute(); } }
調用
static void Main(string[] args) { Receiver receiver = new Receiver(); Command command = new CreateCommand(receiver); Invoker invoker = new Invoker(); invoker.SetCommand(command); invoker.ExecuteCommand(); Console.ReadLine(); }
結果:
命令模式模型代碼:http://download.csdn.net/detail/yysyangyangyangshan/4089536
命令模式,很多個Receiver,並與之對應Command也有很多個,Invoker則負責將Receiver和Command關聯,並執行。
應用程式模型:
abstract class Command1 { protected Receiver1 receiver1; public Command1(Receiver1 creceiver1) { this.receiver1 = creceiver1; } abstract public void Execute(); } abstract class Command2 { protected Receiver2 receiver2; public Command2(Receiver2 creceiver2) { this.receiver2 = creceiver2; } abstract public void Execute(); } class CreateCommand1 : Command1 { public CreateCommand1(Receiver1 receiver1) : base(receiver1) { } public override void Execute() { receiver1.Action(); } } class CreateCommand2 : Command2 { public CreateCommand2(Receiver2 receiver2) : base(receiver2) { } public override void Execute() { receiver2.Action(); } } class Invoker { private Command1 command1; private Command2 command2; public void SetCommand1(Command1 command) { this.command1 = command; } public void ExecuteCommand1() { command1.Execute(); } public void SetCommand2(Command2 command) { this.command2 = command; } public void ExecuteCommand2() { command2.Execute(); } } class Receiver1 { public void Action() { Console.WriteLine("執行命令一"); } } class Receiver2 { public void Action() { Console.WriteLine("執行命令二"); } }
調用
static void Main(string[] args) { Receiver1 receiver1 = new Receiver1(); Receiver2 receiver2 = new Receiver2(); Command1 command1 = new CreateCommand1(receiver1); Command2 command2 = new CreateCommand2(receiver2); Invoker invoker = new Invoker(); invoker.SetCommand1(command1); invoker.ExecuteCommand1(); invoker.SetCommand2(command2); invoker.ExecuteCommand2(); Console.ReadLine(); }
結果:
應用代碼:http://download.csdn.net/detail/yysyangyangyangshan/4089547