具有不同回报类的策略模式实现

时间:2009-12-31 12:50:32

标签: c# strategy-pattern

我有一个MessageProcessor类来处理不同类型的xml消息。基于消息类型的switch语句(C#)调用适当的方法来解析xml并提取消息类型所需的数据。

我宁愿拥有一些解析器类,其中一个将在根据消息类型创建时注入MessageProcessor。切换用多态替换 - 到目前为止一直很好。

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

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

3 个答案:

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