1 回答
TA贡献1943条经验 获得超7个赞
您可以将每个命令包装在自己的处理程序中,如下所示:
public interface ICommandHandler
{
string HandlesCommand { get; }
void Execute();
}
public class OpenFileCommandHandler : ICommandHandler
{
public string HandlesCommand => "Open File";
public void Execute()
{
Console.WriteLine("Open File");
}
}
public class ChangeColorCommandHandler : ICommandHandler
{
public string HandlesCommand => "Change Color";
public void Execute()
{
Console.WriteLine("Change color");
}
}
如果你有一个 IoC 容器,你通常可以通过请求IEnumerable<ICommandHandler>. 如果您没有 IoC 容器,则可以将所有处理程序放入这样的数组中
private ICommandHandler[] _commandHandlers = {new OpenFileCommandHandler(), new ChangeColorCommandHandler()};
然后你可以找到一个命令的所有处理程序并像这样执行它们
var command = "Open File";
var handlers = _commandHandlers.Where(c => c.HandlesCommand == command);
foreach (var handler in handlers)
{
handler.Execute();
}
这还有一个优点,即您可以在不更改任何现有代码的情况下添加新的命令处理程序。
- 1 回答
- 0 关注
- 141 浏览
添加回答
举报