結構性示範代碼
// 抽象命令角色
abstract class Command
{
protected Receiver receiver;
public Command(Receiver receiver) => this.receiver = receiver;
public abstract void Execute();
}
// 具體命令角色
class ConcreteCommand : Command
{
public ConcreteCommand(Receiver receiver) : base(receiver) { }
public override void Execute() => receiver.Action();
}
// 接收者角色
class Receiver
{
public void Action() => Console.WriteLine("Called Receiver.Action()");
}
// 發送者角色
class Invoker
{
private Command command;
public void SetCommand(Command command) => this.command = command;
public void ExecuteCommand() => command.Execute();
}
// 客戶端測試
public class Client
{
public static void Main()
{
Receiver r = new Receiver();
Command c = new ConcreteCommand(r);
Invoker i = new Invoker();
i.SetCommand(c);
i.ExecuteCommand();
}
}
五大角色職責詳細
| 角色 | 職責 |
| Client (客戶端) | 建立具體命令物件並設定其接收者 |
| Command (命令) | 宣告所有具體命令共同的抽象介面(抽象角色) |
| ConcreteCommand (具體命令) | 定義接收者與行為的弱耦合;實作 Execute() 調用接收者操作 |
| Invoker (發送者/請求者) | 負責調用命令物件執行請求 |
| Receiver (接收者) | 具體實施並執行請求的操作 |
核心價值
- 解耦:發送者不需知道接收者介面、執行細節、執行時機
- 封裝:將請求封裝為物件,可排隊、記錄、撤銷
- 擴展:新增命令不影響既有代碼