2009-12-31 50 views
1

我有一个MessageProcessor类,它处理不同类型的xml消息。基于消息类型的switch语句(C#)调用适当的方法来解析xml并提取消息类型所需的数据。具有不同返回类别的策略模式实现

我宁愿有大量的解析器类,其中一个解析器类会在基于消息类型创建时注入到MessageProcessor中。开关替换为多态 - 迄今为止非常好。

但是,我遇到的问题是当前的解析器方法每个都返回不同的结果,例如, ParseExecute(xml,out Session),ParseCallback(xml,out id,out name,...)

在这种情况下可以做我想做的事吗?

+0

你想调用代码看起来像什么?目前尚不清楚MessageProcessor的责任是什么 - 它是否仅仅封装了解析器的选择,以至于它基本上是一个工厂? – 2009-12-31 14:29:24

回答

1

只是一个建议。

你是否想过创建一个基类结果类并从它派生所有不同的结果类型?这样做可以使用多态性来将结果重新解释为具体类型。

但是,因为我不知道你的设计深度,这可能会增加一些额外的复杂性。至少希望它可以给一些启示:)

+0

+1,一个很好的建议 – oldUser 2009-12-31 13:03:51

0

交换机还可以与ChainOfResonsibility

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; 
     } 
    }