工厂方法的作用?
工厂方法又称为虚拟构造器,它定义了一个用于创建对象的接口,让子类决定实例化哪一个类。它的UML图如下:

上图中,Product定义了一个接口用于Factory创建的各种对象,
Factory声明了一个方法用于创建Product.
ConcreteProduct和ConcreteFactory则是具体的实现
工厂方法的示例
动物的叫声,不同动物发出不同的叫声:
public interface Pet { //Product的角色
public String speak();
}
public class Dog implements Pet { //ConcreteProduct的角色
public String speak() {
return "Bark bark...";
}
}
鸭叫:public class Duck implements Pet { <span style="font-family: Arial, Helvetica, sans-serif;">//ConcreteProduct的角色</span>
public String speak() {
return "Quack quack...";
}
}
工厂,根据宠物的类型,选择不同的ConcreteProduct(实际的宠物)返回public class PetFactory {
public Pet getPet(String petType) {
Pet pet = null;
// based on logic factory instantiates an object
if ("bark".equals(petType))
pet = new Dog();
else if ("quack".equals(petType))
pet = new Duck();
return pet;
}
}
测试:
public class SampleFactoryMethod {
public static void main(String args[]){
//creating the factory
PetFactory petFactory = new PetFactory();
//factory instantiates an object
Pet pet = petFactory.getPet("bark");
//you don't know which object factory created
System.out.println(pet.speak());
}
}
链接:http://javapapers.com/design-patterns/factory-method-pattern/
http://www.oodesign.com/factory-method-pattern.html