【问题标题】:Regarding factory design pattern through reflection关于通过反射的工厂设计模式
【发布时间】:2012-05-03 01:33:51
【问题描述】:

我正在对工厂模式进行研发我已经开发了下面的代码,现在我知道子类是狗和猫,但是如果我想通过传递类名通过反射来实现同样的事情,请告诉我该怎么做在 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 中传递类名并创建该子类的对象

【问题讨论】:

  • 大家好,请对此提出建议..!!

标签: java design-patterns


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多