¿Es posible implementar el patrón de comando GOF usando un delegado de Queue of Action?Implementando el Patrón de Comando usando el delegado de Acción C#
He estado tratando de entenderlo por un tiempo y estoy perplejo porque cada una de las posibles acciones que deseo agregar a la cola puede tener un número variado de parámetros.
¿Alguna sugerencia? ¿Estoy ladrando al árbol equivocado al enfocarme en el patrón de comando?
ACTUALIZACIÓN:
Muchas gracias jgauffin, funciona un convite ... mi aplicación ahora se ve como
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;
}
}
}
Esto parece una solución interesante, ¿te importaría explicar cómo funcionaría el método de activación? comando (T) o comando.Invocar()? ¿Y por qué un diccionario de comandos, por qué no solo una lista o cola? – Dve
El diccionario es más rápido, no tiene que recorrer la colección usted mismo para encontrar el tipo de comando correcto (y sus suscriptores) – jgauffin
He agregado implementaciones. Es posible que no funcionen al 100%. Intenta hacerlo funcionar. – jgauffin