Có thể triển khai mẫu lệnh GOF bằng cách sử dụng một đại biểu Queue of Action không?Thực hiện mẫu lệnh bằng cách sử dụng ủy nhiệm C# Action
Tôi đã cố gắng để quấn đầu của tôi xung quanh nó một lúc và tôi stumped bởi vì mỗi hành động có thể tôi muốn thêm vào hàng đợi có thể có một số lượng tham số.
Mọi đề xuất? Tôi đang sủa cây sai bằng cách tập trung vào mẫu lệnh?
UPDATE:
Rất cám ơn jgauffin, nó hoạt động một điều trị ... thực hiện của tôi bây giờ trông giống như
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;
}
}
}
Điều này có vẻ giống như một giải pháp thú vị, bạn có muốn xây dựng phương pháp kích hoạt sẽ hoạt động như thế nào không? lệnh (T) hoặc command.Invoke()? Và tại sao một từ điển của _commands, tại sao không chỉ là một Danh sách thẳng hoặc Hàng đợi? – Dve
Từ điển nhanh hơn, bạn không phải tự mình duyệt qua bộ sưu tập để tìm đúng loại lệnh (và là người đăng ký) – jgauffin
Tôi đã thêm các triển khai. Chúng có thể không hoạt động 100%. Cố gắng làm cho nó hoạt động. – jgauffin