是否可以使用Action委托队列来实现GOF命令模式?
我已经尝试了一段时间,但是因为我想要添加到队列中的每个可能的操作都可能具有不同数量的参数,所以我感到困惑。
有什么建议吗?我是否错在专注于命令模式?
更新:
非常感谢jgauffin,它完美地工作了...我的实现现在看起来像:
public class CommandDispatcher
{
private readonly Dictionary<Type, List<Action<ICommand>>> _registeredCommands =
new Dictionary<Type, List<Action<ICommand>>>();
public void RegisterCommand<T>(Action<ICommand> action) where T : ICommand
{
if (_registeredCommands.ContainsKey(typeof (T)))
_registeredCommands[typeof (T)].Add(action);
else
_registeredCommands.Add(typeof (T), new List<Action<ICommand>> {action});
}
public void Trigger<T>(T command) where T : ICommand
{
if (!_registeredCommands.ContainsKey(typeof(T)))
throw new InvalidOperationException("There are no subscribers for that command");
foreach (var registeredCommand in _registeredCommands[typeof(T)])
{
registeredCommand(command);
if (command.Cancel) break;
}
}
}