基于与该方法(参数)没有直接关系的变量运行方法的最佳方法是什么。
例如,如果我有一个接受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]();
}
但我同样不喜欢这种方式,还有其他方式吗?我真的更感兴趣的是人们认为正确/最有效/最先进的实现方式。
答案 0 :(得分:2)
您要求的是工厂方法。使用从字符串获取的布尔检查并不总是最好的。根据您选择的条件获得所需的具体课程,然后您只需要致电
factory.method()
看一下这个wiki,以便更加明确。