设计模式(5)- 工厂方法模式

工厂方法模式

      1.定义

       定义个一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法模式使一个类的实例化延迟到其子类。

      2.示例代码

      

/*导出的文件对象接口,即工厂方法所创建的对象接口*/
public interface ExportFileApi{
   public boolean export(String data);
}

/*导出txt格式的实现类*/
public class ExportTxtFile implements ExportFileApi{
   public boolean export(String data){
      System.out.println("导出data到文本文件");
      return true;
   }
}

/*导出到数据库备份的实现类*/
public class ExportDB implements ExportFileApi{
   public boolean export(String data){
      System.out.println("导出data到数据库备份");
      return true;
   }
}

   

/*实现导出数据的业务功能对象,即工厂创建器*/
public abstract class ExportOperate{
   public boolean export(String data){
       //使用工厂方法
       ExportFileApi api = factoryMethod();
       return api.export(data);
   }
   //工厂方法,创建导出文件对象的接口对象
   protected abstract ExportFileApi factoryMethod();
}

/*子类工厂创建导出txt文本的数据导出对象*/
public class ExportTxtFileOperate extends ExportOperate{
    protected ExportFileApi factoryMethod(){
         //创建导出成文本文件格式的对象
         return new ExportTxtFile();
    }
}

/*子类工厂创建导出数据库DB备份对象*/
public class ExportDBOperate extends ExportOperate{
    protected ExportFileApi factoryMethod(){
         //创建导出成文本文件格式的对象
         return new ExportDB();
    }
}

   

/*客户端自主选择导出txt还是导出到数据库备份*/
public class Client{
    public static void main(String args[]){
        //创建需要使用的数据导出对象
        ExportOperate operate = new ExportDBOperate();
        //调用输出数据的功能方法
        operate.export("测试数据");
    }
}

   3.实际应用

       工厂方法可以让你在实现功能的时候,如果需要某个产品对象,只需要产品的接口即可,而无需关心具体的实现。选择具体实现的任务延迟到子类去完成。工厂方法给子类提供了一个挂钩,使得扩展新的对象版本变得非常容易。比如需要扩展一个导出xml格式的数据,只需新增一个子类来提供新的工厂方法实现,然后在客户端使用新的子类即可。

工厂方法模式的本质:延迟到子类来选择实现

猜你喜欢

转载自renhanxiang.iteye.com/blog/2406898