2012-05-02 8 views
0

私は、工場パターンでR & Dをやっていました。私は以下のコードを作成しました。今はサブクラスが犬と猫であることは分かっていますが、ただでクラス名を渡し、私もタイプを決定する必要がないように、私はそれに反射機能を追加することができますどのようにそれを教えてくださいmain.java反射を通した工場デザインパターンについて

public abstract class Animal { 
    public abstract String makeSound(); 
} 

public class Dog extends Animal { 

    @Override 
    public String makeSound() { 
     return "Woof"; 
    } 

} 

public class Cat extends Animal { 

    @Override 
    public String makeSound() { 
     return "Meow"; 
    } 

} 

public class AnimalFactory { 

    public Animal getAnimal(String type) { 
     if ("canine".equals(type)) { 
      return new Dog(); 
     } else { 
      return new Cat(); 
     } 
    } 

} 

public class Main { 

    public static void main(String[] args) { 
     AnimalFactory animalFactory = new AnimalFactory(); 

     Animal a1 = animalFactory.getAnimal("feline"); 
     System.out.println("a1 sound: " + a1.makeSound()); 

     Animal a2 = animalFactory.getAnimal("canine"); 
     System.out.println("a2 sound: " + a2.makeSound()); 
    } 

} 

にクラス名を渡すことで、反射によって達成メインのJavaとそのサブクラスのオブジェクトが作成されます

+0

こんにちは人々..!:クラスがパッケージyour.packageに自分のファイルになり、デフォルトのコンストラクタを持っている必要があります – dghtr

答えて

2

これを行うには、Catと012このために助言してください、

public class AnimalFactory { 
    public Animal getAnimal(String type) { 
     return (Animal) Class.forName("your.package." + type).newInstance(); 
    } 
}