2009-12-31 88 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; 
     } 
    }