2012-05-02 51 views
0

我正在做工廠模式R &我已經開發了下面的代碼,現在我知道子類是狗和貓,但請告訴我如果我想要做同樣的事情該怎麼做在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

嗨夥計,請告知該.. !! – dghtr

回答

2

爲了使其工作,您的CatDog類必須在自己的文件包your.package和有默認的構造函數:

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