1

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

我宁愿有一些解析器类,其中一个将在基于消息类型创建时注入到 MessageProcessor 中。Switch 被多态性所取代——到目前为止一切都很好。

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

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

4

3 回答 3

1

只是一个建议。

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

但由于我不深入了解您的设计,这可能会为您增加一些额外的复杂性。至少希望它能给一些启发:)

于 2009-12-31T12:57:58.920 回答
0

Some kind of factory pattern maybe

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

And return objects that implements an interface as well

public class Parser1 : IParser
    {

        public IParseResult Parse(string xml)
        {
            //Set values

            return result;
        }
    }
于 2009-12-31T13:37:57.427 回答
0

Switch 也可以替换为 ChainOfResonsibility

于 2009-12-31T13:02:17.693 回答