我有一个使用Bot框架(https://dev.botframework.com/)开发的机器人,这个机器人应该根据传入的命令来处理特定的事情。
因此,在我的代码中,我有一个包含多个(9个准确)if语句的方法。 (见下面的例子)。解析传入的命令。我正在努力寻找一个好的模式来使代码更好。也许9个if语句可以,但我发现这些语句在将来可能会增加的潜在风险。我一直在关注战略模式,但并不认为它是一个好的候选人。什么模式可以替代多个if语句?
if (text.Contains("command1")) {
doA();
}
if (text.Contains("command2")) {
doB();
}
... an so on.
答案 0 :(得分:1)
您可以使用策略模式。下面是一个简单的例子:
声明:
class ResponseStrategy
{
private readonly IEnumerable<IInputHandler> _responses;
public ResponseStrategy(IEnumerable<IInputHandler> responses)
{
// TODO protect from null input, etc.
_responses = responses;
}
public ?void? Respond(string input)
{
// TODO put error handling in place and expect input to match no handlers
_responses
.First(r => r.CanHandle(input))
.Handle(input);
}
}
interface IInputHandler
{
bool CanHandle(string input);
?void? Handle(string input);
}
class DoAInputHandler : IInputHandler
{
public bool CanHandle(string input)
{
return input.contains("command1");
}
public ?void? Handle(string input)
{
// DoA();
}
}
class DoBInputHandler : IInputHandler
{
public bool CanHandle(string input)
{
return input.contains("command2");
}
public ?void? Handle(string input)
{
// DoB();
}
}
设定:
var responses = new List<IInputHandler>
{
new DoAInputHandler(),
new DoBInputHandler(),
// other handlers
};
var responseStrategy = new ResponseStrategy(responses);
用法:
responseStrategy.Respond("asl;daskjnfsd command1 asdsdgdfn");