using System;
using System.Collections.Generic;
using System.Text;
namespace PDFPatcher.Common
{
///
/// 表示在指定上下文下执行的处理命令。
///
/// 处理命令时的上下文类型。
interface ICommand
{
void Process(P context, params string[] parameters);
}
///
/// 不区分字符串大小写匹配的容器集合。用于编辑器命令模式。
///
/// 命令模式的处理参数类型。
sealed class CommandRegistry
{
readonly Dictionary> _container = new Dictionary>(StringComparer.OrdinalIgnoreCase);
///
/// 注册执行处理的命令处理器。
///
/// 执行命令的处理器。
/// 触发该命令的命令标识符。
public void Register(ICommand command, params string[] commandIDs) {
foreach (var cmd in commandIDs) {
_container.Add(cmd, command);
}
}
///
/// 执行指定的命令。
///
/// 命令标识符。
/// 处理命令时的上下文变量。
/// 参数。
/// 如找到对应的命令处理,则返回 true,否则返回 false。
public bool Process(string commandID, P context, params string[] parameters) {
if (_container.TryGetValue(commandID, out ICommand
cmd)) {
cmd.Process(context, parameters);
return true;
}
return false;
}
}
}