0

看这个例子: 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;
}
4

1 回答 1

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

通过在工厂中拥有所有这些额外的代码,您可以轻松地修改用于创建新蝙蝠的代码,而无需遍历所有使用它的代码。

于 2013-02-18T17:44:34.363 回答