我正在对工厂模式进行研发,我开发了下面的代码,现在我知道子类是 Dog 和 Cat ,但是如果我想通过传递类名通过反射实现同样的事情,请告诉我该怎么做在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中传递类名并创建该子类的对象
最佳答案
要实现此功能,您的 Cat
和 Dog
类必须位于包 your.package
中各自的文件中,并且具有默认构造函数:
public class AnimalFactory {
public Animal getAnimal(String type) {
return (Animal) Class.forName("your.package." + type).newInstance();
}
}
关于java - 通过反射(reflection)思考工厂设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10417688/