基于单独的值实现要调用的方法

时间:2014-06-11 12:39:15

标签: c# inheritance methods abstract

基于与该方法(参数)没有直接关系的变量运行方法的最佳方法是什么。

例如,如果我有一个接受Json或XML的输入,并且我希望使用基于输入类型(XML或Json)的正确方法解析此输入,那么可以采取哪些可能的方法?

通常我会按照以下方式实现:

StreamReader stream = new StreamReader(InputStream);
userInput= stream.ReadToEnd();

if (isJson(userInput))
{
    MethodA();
}
else
{
    MethodB();
}

但是我不喜欢这样做,因为我觉得它有点不成熟而且更愿意做

StreamReader stream = new StreamReader(InputStream);
userInput= stream.ReadToEnd();

//get input type and invoke correct method automatically
Method();

让它自动使用它,我知道我可以用抽象类和覆盖来做这样的事情,但是我不知道如何基于bool初始化它。这甚至可能吗?如果不是bool而是我有更多的检查要运行,如果string ==“a”这样做,如果string ==“b”这样做,如果string ==“C”这样做,如果string == “D”这样做。

我知道我可以通过某种形式的行动地图来做到这一点,例如:

InputType inputType = getInputType(userInput);
Dictionary<InputType, Action> actionMap = new Dictionary<InputType, Action>();

actionMap.Add(InputType.Json, MethodA());
actionMap.Add(InputType.XML, MethodB());
actionMap.Add(InputType.Other, MethodC());

if (actionMap.ContainsKey(inputType))
{
   actionMap[inputType]();
}

但我同样不喜欢这种方式,还有其他方式吗?我真的更感兴趣的是人们认为正确/最有效/最先进的实现方式。

1 个答案:

答案 0 :(得分:2)

您要求的是工厂方法。使用从字符串获取的布尔检查并不总是最好的。根据您选择的条件获得所需的具体课程,然后您只需要致电

  

factory.method()

看一下这个wiki,以便更加明确。

http://en.wikipedia.org/wiki/Factory_method_pattern