首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 設計模式:命令模式完整指南(二)— 結構性代碼與角色解析

     編輯:關於C語言

結構性示範代碼


// 抽象命令角色
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 (接收者)具體實施並執行請求的操作

核心價值

  • 解耦:發送者不需知道接收者介面、執行細節、執行時機
  • 封裝:將請求封裝為物件,可排隊、記錄、撤銷
  • 擴展:新增命令不影響既有代碼
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved