전략 패턴을 사용할 수 있습니다. 아래의 간단한 예 :
선언 :
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