查看此示例:http://www.codeproject.com/Articles/68670/The-Factory-Pattern
为什么我不能像使用反射那样使用反射来实例化具体对象,而不是创建工厂的额外工作?
private Bat OrderBat(string choice)
{
Bat myBat = Reflection.NewObject(choice);
myBat.clean();
myBat.applyGrip();
myBat.applyLogo();
myBat.applyCover();
myBat.pack();
return myBat;
}
答案 0 :(得分:2)
仅在
时有效 1)choice
字符串直接映射到Bat
类名
2)所有Bat
类都有默认的无参数构造函数
想象有一天,一些新的Bat
类有额外的参数,例如颜色:
switch (choice) {
case "hardball-yellow":
myBat = new HardBallColoredBat(Color.YELLOW);
break;
case "hardball-white":
myBat = new HardBallColoredBat(Color.WHITE);
break;
case "softball":
myBat = new SoftBallBat();
break;
}
通过在工厂中拥有所有这些额外代码,您可以轻松修改用于创建新蝙蝠的代码,而无需使用所有使用它的代码。