これには戦略パターンを使用できます。以下の簡単な例:
宣言:
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");
は、文字列 ' "AAABBBは、"' '両方doA'によって処理されるだろうあなたの例では 'doB'ですか? –
あなたはどの言語を使用していますか? – Sweeper
言語はC#で、文字列 "aaa"と "bbb"は単なる例です。より良い値で質問を更新しました。 – Robert