1,定义
定义一个用于创建对象的接口,让子类决定实例化哪一个类。
2,用途
工厂方法模式是new一个对象的替代品,所以在所有需要生成对象的地方都可以使用。
工厂模式屏蔽了产品类,产品类的实现如何变化,调用者都不关心,只需要关心产品的接口,只要接口保持不变,系统中的上层模块就不会发生变化。
因为产品类的实例化工作是有工厂类负责的,一个产品对象具体由哪一个产品生成是由工厂类决定的。
3,使用
首先是抽象产品类
public abstract class Product {
//define the public method for product class
public void method1(){
}
//abstract method
public abstract void method2();
}
接着随便定义两个具体产品类
public class ConcreteProduct1 extends Product {
@Override
public void method2() {
// TODO Auto-generated method stub
}
}
public class ConcreteProduct2 extends Product {
@Override
public void method2() {
// TODO Auto-generated method stub
}
}
public abstract class Creator {
public abstract <T extends Product> T createPorduct (Class<T> c);
}
public class ConcreteCreator extends Creator {
@Override
public <T extends Product> T createPorduct(Class<T> c) {
Product product = null;
try{
product = (Product)Class.forName(c.getName()).newInstance();
}catch(Exception e){
e.printStackTrace();
}
return (T) product;
}
}
public class Client {
public static void main(String [] args){
Creator creator = new ConcreteCreator();
Product product1 = creator.createPorduct(ConcreteProduct1.class);
Product product2 = creator.createPorduct(ConcreteProduct2.class);
}
}
Done!