为创建对象定义一个接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟至子类。
public interface Factory{
Product createproduct();
}//Factory接口定义了createproduct()方法来返回Product类型的实例对象,
//ConcreateFactory实现了该方法,每次调用都会实例化一个新的ConcreateProduct返回
public class ConcreateFactory implements Factory{
public Product createProduct(){
return new ConcreateProduct();
}
}
public interface Product{}
public class ConcreateProduct implements Product{}
//工厂方法模式使用
public class Client{
private Factory factory;
public Client (Factory factory){
this.factory=factory;
}
public void doSomething(){
Product product =factory.createproduct();
//to do something...
}
public static void main(String[] args)
{
Client client=new Client(new ConcreateFactory());
client.doSomething();
}
}
//如果具体实现类较多,我们可以定义一个参数化的工厂方法,根据不同
//的输入返回不同的实现子类,代码片段如下.
public Product createProduct(String type){
if("type1".equals(type)){
return a type1 instance...
}else if("type2".equals(type)){
return a type2 instance...
}else{
...
}
}