2010-12-16 40 views
0

最近我发现我的自我实现下像一个模式代码:这只是命令模式的功能实现吗?

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); 
    } 
} 

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

回答

2

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

但我想说,这不是Command Pattern,但可能是一个方法委托。

Command Pattern主要关注执行方法/任务。以下是可从Command预计在这种模式标准的行为:

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

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

使用您的方法,您不需要那么做。在将每个任务/方法包装在Command包装中并提供上述行为之前,这并不容易实现。

查看Wikipedia文章,了解有关Command Pattern的更多详细信息。

+0

好的答案...我忘了撤销/重做等部分。 – 2010-12-16 09:24:48

相关问题