关于通过反射的工厂设计模式

问题描述:

我正在做工厂模式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

为了使其工作,您的CatDog类必须在自己的文件包your.package和有默认的构造函数:

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