定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到子类。

区别:与Simple Factory的区别:将类的实例化延迟到子类。

适用的情况:
    1、如果一个类要创建某个接口的对象,但又不知道具体的实现。
    2、如果一个类本身希望由他的子类来创建所需的对象的时候。

体现了”依赖倒置的原则“(要依赖抽象,不要依赖于具体的类)。

1 package com.design;
2  
3 public interface exportApi {
4     public boolean export(String data);
5 }
 1 package com.design;
 2  
 3 public class exportTextFile implements exportApi {
 4  
 5     public boolean export(String data){
 6         // TODO Auto-generated method stub
 7         System.out.println(data);
 8         return true;
 9     }
10  
11 }
 1 package com.design;
 2  
 3 public class exportDB implements exportApi {
 4  
 5     public boolean export(String data){
 6         // TODO Auto-generated method stub
 7         System.out.println(data);
 8         return false;
 9     }
10  
11 }
 1 package com.design;
 2  
 3 public abstract class factory {
 4     public boolean export(String data){
 5         exportApi api=factorymethod();
 6         return api.export(data);
 7     }
 8  
 9     protected abstract exportApi _factorymethod();
10 }
1 package com.design;
2  
3 public class factorymethod extends factory{
4     protected exportTextFile _factorymethod(){
5         return new exportTextFile();
6     }
7 }
1 package com.design;
2  
3 public class client {
4     public static void main(String[] args){
5         exportOperate operate=new factorymethod();
6  
7         operate.export("sdf");
8     }
9 }