这仅仅是Command模式的功能实现吗?

时间:2010-12-16 08:59:47

标签: c# design-patterns generics

最近,我发现自己按照以下模式实现代码:

public class SomeClass()
{
    private T Execute<T>(Func<T> function)
    {
        // Do some common stuff for every function like logging and try-catch
        function();
    }

    public Type1 Command1()
    {
        Execute<Type1>(() => funcForCommand1);
    }

    public Type2 Command2()
    {
        Execute<Type2>(() => funcForCommand2);
    }
}

这只是CommandPattern的功能方法吗?根据情况,我有不同的版本?你可以通过让funcForCommandX从定义ICommand函数的某些Execute继承来实现完全相同的东西,但是在很多情况下我更喜欢我的方式,因为大部分时间都是命令仅在代码中的一个位置使用,不需要暴露给其余代码。当然,如果在代码中的更多位置使用它,则应该实现真正的命令模式。

1 个答案:

答案 0 :(得分:2)

这取决于您的需求。这就是我所能说的。

但我想声明这不是Command Pattern,但可能是方法委派。

Command Pattern主要关注方法/任务的执行。以下是此模式中Command可以预期的标准行为:

  • 撤消/重做
  • 交易
  • 复合命令执行

当您在Command中包装方法/任务实现时,您可以提供有关如何撤消/撤消已执行操作的实现。提供将当前执行附加到事务,宏记录,线程安全执行等的默认实现。

用你的方法你没有那个。在将每个任务/方法包装在Command包装器中并提供上述行为之前,这并不容易实现。

请查看Wikipedia文章,详细了解Command Pattern