工厂模式无法理解为什么工厂

时间:2013-02-18 17:24:33

标签: design-patterns factory

查看此示例: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;
}

1 个答案:

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

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