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 に答える