关于工厂设计模式通过反思

时间:2012-05-02 16:16:27

标签: java design-patterns

我在工厂模式上做R& D我已经开发了下面的代码,现在我知道子类是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中传递类名,并创建该子类的对象

1 个答案:

答案 0 :(得分:2)

要实现此目的,您的CatDog类必须位于包your.package中的自己的文件中,并且具有默认构造函数:

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