使用静态方法C#实现命令设计模式

Bra*_*ris 3 c# static design-patterns

我知道如何实现Command Design模式如下:

public abstract class Command
{
   public abstract void Execute(string someString);
}
Run Code Online (Sandbox Code Playgroud)

假设我继承了这个,作为一个例子:

public class ConnectionCommand : Command
{
   public override void Execute(string connectionString)
   {
      ...do some stuff here...;
   }
}
Run Code Online (Sandbox Code Playgroud)

问题是使用这个ConnectionCommand我需要首先实例化一个对象,但命令是无上下文的,所以我宁愿不必实例化任何东西来运行ConnectionCommand的Execute方法.(PS,ConnectionCommand.Execute()将从委托中的事件运行).

我如何重新创建这种设计模式,但允许静态调用这些方法?

Dav*_*rno 8

代理是C#内置的命令模式实现.为什么重新发明轮子; 使用委托,自动支持静态,纯函数.

所以你有一个事件系统,那些事件会调用代理.您需要这些委托具有状态,而不创建某些类的实例.这就是关闭的地方.举个例子:

public class SomeClass
{
    public static CreateCommand(SomeType state, SomeEventHandler eventHandler)
    {
        eventHandler += (s, e) => MyDelegate(state, s, e);
    }

    private static void MyDelegate(SomeType state, object sender, EventArgs e)
    {
        // do something with state, when the event is fired.
    }
}
Run Code Online (Sandbox Code Playgroud)