我有一个MessageProcessor类来处理不同类型的xml消息。基于消息类型的switch语句(C#)调用适当的方法来解析xml并提取消息类型所需的数据。
我宁愿拥有一些解析器类,其中一个将在根据消息类型创建时注入MessageProcessor。切换用多态替换 - 到目前为止一直很好。
但是,我遇到的问题是当前的解析器方法都返回不同的结果,例如ParseExecute(xml,out Session),ParseCallback(xml,out id,out name,...)
在这种情况下,我可以做我想做的事吗?
答案 0 :(得分:1)
只是一个建议。
您是否考虑过创建基本结果类并从中派生所有不同的结果类型?通过这种方式,您可以考虑使用多态来将结果重新解释为具体类型。
但由于我不深入了解您的设计,这可能会为您增加一些额外的复杂性。至少希望它可以提供一些灵感:)
答案 1 :(得分:0)
Switch也可以用ChainOfResonsibility替换
答案 2 :(得分:0)
某种工厂模式可能
public class ParserFactory
{
public static IParser Create(string type)
{
IParser parser;
switch (type)
{
case "1":
parser = new Parser1();
break;
case "2":
parser = new Parser2();
break;
default:
throw new ArgumentOutOfRangeException("type");
}
return parser;
}
}
并返回实现接口的对象
public class Parser1 : IParser
{
public IParseResult Parse(string xml)
{
//Set values
return result;
}
}