2012-05-01 75 views
-5

我正在做的工厂图谱R & d我开发了下面的代码,请指教是正确的,因为每个工厂模式的功能..关于工厂设计模式

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

} 

请指教它是正确的按照工厂模式的设计,我可以提高它进一步

+3

R&d?你不需要阅读GoF书吗?看起来很好... – duffymo

+1

我会调用工厂方法'createAnimal'而不是'getAnimal',因为这就是它的作用。 – assylias

回答

3

如果您在类名可以避开类型检查通:

public class AnimalFactory { 

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

} 
+0

@ duffymo ..请你用完整的代码显示,因为我已经完成了上面的操作,这将使理解更加清晰,谢谢 – dghtr

+0

@ duffymo。请在完整的代码中解释,因为这里的变化也需要在主类中完成。 – dghtr

+3

我给你完整的代码。想办法。如果你不能用这个简单的例子来管理它,那么你就不应该为这个问题编写模式 - 或者Java。 – duffymo