设计模式学习笔记------工厂方法模式

              工厂方法模式

一、代码实例

  1 /**
  2  * 导出文件的对象的接口
  3  * @author abc
  4  *
  5  */
  6 public interface ExportFileApi {
  7     
  8     /**
  9      * 导出内容成为文件
 10      * @param data 示意:需要保存的数据
 11      * @return 是否导出成功
 12      */
 13     public boolean export(String data);
 14 }
 15 
 16 
 17 /**
 18  * 导出成文本格式的对象
 19  * @author abc
 20  *
 21  */
 22 public class ExportTxtFile implements ExportFileApi {
 23 
 24     @Override
 25     public boolean export(String data) {
 26         System.out.println("导出" + data + "到文本文件");
 27         return true;
 28     }
 29 
 30 }
 31 
 32 /**
 33  * 导出成数据库备份文件形式的对象
 34  * @author abc
 35  *
 36  */
 37 public class ExportDB implements ExportFileApi {
 38 
 39     @Override
 40     public boolean export(String data) {
 41         System.out.println("导出" + data + "到数据库备份文件");
 42         return true;
 43     }
 44 
 45 }
 46 
 47 /**
 48  * 实现导出数据业务功能的对象
 49  * @author abc
 50  *
 51  */
 52 public abstract class ExportOperate {
 53     
 54     /**
 55      * 工厂方法,创建你导出的文件对象的接口对象
 56      * @return 导出的文件对象的接口对象
 57      */
 58     protected abstract ExportFileApi factoryMethod();
 59     
 60     /**
 61      * 导出文件
 62      * @param data 需要保存的数据
 63      * @return 是否成功导出文件
 64      */
 65     public boolean export(String data) {
 66         //使用工厂方法
 67         ExportFileApi api = factoryMethod();
 68         return api.export(data);
 69     }
 70     
 71 }
 72 
 73 /**
 74  * 具体的创建器实现对象,实现创建导出文本文件格式的对象
 75  * @author abc
 76  *
 77  */
 78 public class ExportTxtFileOperate extends ExportOperate {
 79 
 80     @Override
 81     protected ExportFileApi factoryMethod() {
 82         //创建导出成文本文件格式的对象
 83         return new ExportTxtFile();
 84     }
 85 
 86 }
 87 
 88 /**
 89  * 具体的创建器实现对象,实现创建导出成数据库备份文件形式的对象
 90  * @author abc
 91  *
 92  */
 93 public class ExportDBOperate extends ExportOperate {
 94 
 95     @Override
 96     protected ExportFileApi factoryMethod() {
 97         //导出成数据库备份文件形式的对象
 98         return new ExportDB();
 99     }
100 
101 }
102 
103 
104 public class Client {
105     public static void main(String[] args) {
106         //创建需要使用的Createor对象
107         ExportOperate operateDb = new ExportDBOperate();
108         ExportOperate operateFile = new ExportTxtFileOperate();
109         //调用输出数据的功能丰富
110         operateDb.export("测试数据");
111         operateFile.export("测试数据");
112     }
113 }
114 
115 控制台显示
116 导出测试数据到数据库备份文件
117 导出测试数据到文本文件

 二、认识工厂方法模式

  1.工厂方法模式的功能:工厂方法模式的主要功能是让父类在不知道具体实现的情况下,完成自身的功能调用;而具体的实现延迟到子类实现。

  2.实现成抽象类:工厂方法的实现中,通常父类会是一个抽象来,里面包含创建所需对象的抽象方法。

  3.实现成具体的类:也可以吧父类实现成为一个具体的类。这种情况下,通常是父类中提供获取所需对象的默认实现方法,这样即使没有具体的子类,也能够运行。

  4.工厂方法的参数和返回:工厂方法的实现中,可能需要参数,以便决定到底选用哪一种具体的实现。也就是说通过在抽象方法里面传递参数,在子类实现的时候根据参数进行选择,看看究竟应该创建哪一个具体的实现对象。

  5.谁来使用工厂方法创建对象:在工厂方法模式里面,客户端要么使用Creator对象,要么使用Creator创建的对象,一般客户端不直接使用工厂方法。当然也可以直接把工厂方法暴露给客户端操作,但是一般不这么做。

  6.工厂方法模式的调用顺序示意图

    客户端使用Creator创建出来的对象情况下的调用顺序示意图

  

    客户端使用Creator对象时候的调用顺序示意图

  

 

posted @ 2018-01-08 18:01  有悟还有迷  阅读(176)  评论(0编辑  收藏  举报