【问题标题】:Regarding factory design pattern关于工厂设计模式
【发布时间】:2012-05-01 16:39:45
【问题描述】:

我在做工厂模式的研发我已经开发了下面的代码,请根据工厂模式的功能告诉它是否正确..

    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());
    }

}

根据工厂模式的设计,请指教是否正确,我可以进一步改进吗

【问题讨论】:

  • 研发?你不只需要阅读 GoF 的书吗?看起来不错...
  • 我会调用工厂方法createAnimal 而不是getAnimal,因为它就是这样做的。

标签: java design-patterns


【解决方案1】:

如果传入类名可以避免类型检查:

public class AnimalFactory {

    public Animal getAnimal(String className) throws Exception {
        Class animalClass = Class.forName(className);              
        return animalClass.newInstance();
    }

}

【讨论】:

  • @duffymo..您能否像我在上面所做的那样显示完整的代码,这将使理解更加清晰,谢谢
  • @duffymo..请用完整的代码解释,因为主类也需要进行更改。
  • 我确实给了你完整的代码。想办法。如果您无法为这个简单的示例管理它,那么您不应该编写模式 - 或 Java,就此而言。
  • 是的,但请建议需要在主文件中进行哪些更改。
  • 16 个问题,您接受了 NONE。为什么有人要费心帮助你?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 2011-11-20
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多