设计模式学习笔记------工厂方法模式
工厂方法模式
一、代码实例
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对象时候的调用顺序示意图