工厂方法模式(Factory Method)
来源:互联网 发布:淘宝刷単软件用哪个好 编辑:程序博客网 时间:2024/05/22 15:10
@@@模式定义:
定义一个用于创建对象(interface)的接口(这里的"接口"不是指interface而是method),
让子类(通过override父类创建interface的method来)决定实例化哪一个类,
Factory Method使一个类(interface)的实例化延迟到其(指Factory Method所在的类)子类。
@@@练习示例:
导出数据的应用框架。
@@@示例代码:
src/export/ExportFileApi.java
src/export/ExportTxtFile.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/export/ExportDB.java
~~~~~~~~~~~~~~~~~~~~~~~~
src/export/ExportOperate.java
src/export/ExportDBOperate.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/export/ExportXml.java
~~~~~~~~~~~~~~~~~~~~~~~~~
src/export/ExportOperate2.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/user/Client.java
~~~~~~~~~~~~~~~~~~~~
@@@工厂方法模式的实现:
1. 一般实现成抽象类
2. 也可以实现成具体的类
3. 可以通过给工厂方法传递参数来选择实现
4. 工厂方法一般返回的是被创建对象的接口对象
5. 在工厂方法模式里面,是Creator中的其他方法在使用工厂方法创建的对象
6. 工厂方法一般不提供给外部使用(用protected修饰)
7. 可以使用工厂方法模式来连接平行的类层次
@@@工厂方法模式的优点 :
1. 可以在不知道所依赖的对象的具体实现的情况下编程
2. 更容易扩展对象的新版本
@@@工厂方法模式的缺点 :
1. 具体产品对象和工厂方法的耦合性
@@@工厂方法模式的本质:
延迟到子类来选择实现
@@@工厂方法模式体现的设计原则 :
依赖倒置原则
定义一个用于创建对象(interface)的接口(这里的"接口"不是指interface而是method),
让子类(通过override父类创建interface的method来)决定实例化哪一个类,
Factory Method使一个类(interface)的实例化延迟到其(指Factory Method所在的类)子类。
@@@练习示例:
导出数据的应用框架。
@@@示例代码:
src/export/ExportFileApi.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package export;/** * 导出文件对象的接口 */public interface ExportFileApi { /** * 导出内容成为文件 * @param data: 示意需要保存的数据 * @return 是否导出成功 */public boolean export(String data);}
src/export/ExportTxtFile.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package export;/** * 导出成文本文件格式的对象 */public class ExportTxtFile implements ExportFileApi { public boolean export(String data) { //简单示意一下,这里需要操作文件 System.out.println("导出数据" + data + "到文本文件"); return true; }}
src/export/ExportDB.java
~~~~~~~~~~~~~~~~~~~~~~~~
package export;/** * 导出成数据库备份文件形式的对象 */public class ExportDB implements ExportFileApi {public boolean export(String data) {//简单示意一下,这里需要操作数据库和文件 System.out.println("导出数据" + data + "到数据库备份文件");return true;}}
src/export/ExportOperate.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package export;/** * 实现导出数据的业务功能对象 */public class ExportOperate { /** * 导出文件 * @param type 用户选择的导出类型 * @param data 需要保存的数据 * @return 是否成功导出文件 */public boolean export(int type, String data) {//使用工厂方法ExportFileApi api = factoryMethod(type);return api.export(data);}/** * 工厂方法,创建导出的文件对象的接口对象 * @param type 用户选择的导出类型 * @return 导出的文件对象的接口对象 */protected ExportFileApi factoryMethod(int type) {ExportFileApi api = null;if (1 == type) {api = new ExportTxtFile();} else if (2 == type) {api = new ExportDB();}return api;}}
src/export/ExportTxtFileOperate.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package export;/** * 具体的创建器实现对象,实现创建导出成文本格式的对象 */public class ExportTxtFileOperate extends ExportOperate {protected ExportFileApi factoryMethod() { //创建导出成文本格式的对象return new ExportTxtFile();}}
src/export/ExportDBOperate.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package export;/** * 具体的创建器实现对象,实现创建导出成数据库备份文件形式的对象 */public class ExportDBOperate extends ExportOperate {protected ExportFileApi factoryMethod() {//创建导出成文本格式的对象return new ExportDB();}}
src/export/ExportXml.java
~~~~~~~~~~~~~~~~~~~~~~~~~
package export;/** * 导出成xml文件的对象 */public class ExportXml implements ExportFileApi { public boolean export(String data) { // 简单示意一下 System.out.println("导出数据" + data + "到XML文件"); return true; }}
src/export/ExportOperate2.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package export;/** * 扩展ExportOperate对象,加入可以导出的XML文件 */public class ExportOperate2 extends ExportOperate { /** * 覆盖父类的工厂方法,创建导出的文件对象的接口对象 * @param type 用户选择的导出类型 * @return 导出的文件对象的接口对象 */protected ExportFileApi factoryMethod(int type) { ExportFileApi api = null; // 可以全部覆盖,也可以选择自己感兴趣的覆盖 // 这里只添加自己新的实现,其他的不管 if (3 == type) { api = new ExportXml(); } else { // 其他的还是让父类来实现 api = super.factoryMethod(type); } return api;}}
src/user/Client.java
~~~~~~~~~~~~~~~~~~~~
package user;import export.ExportOperate;import export.ExportOperate2;public class Client {public static void main(String[] args) {// 创建需要使用的Creator对象ExportOperate operate = new ExportOperate2();// 下面变换传入的参数来测试参数化工厂方法operate.export(1, "Test1");operate.export(2, "Test2");operate.export(3, "Test3");}}
@@@工厂方法模式的实现:
1. 一般实现成抽象类
2. 也可以实现成具体的类
3. 可以通过给工厂方法传递参数来选择实现
4. 工厂方法一般返回的是被创建对象的接口对象
5. 在工厂方法模式里面,是Creator中的其他方法在使用工厂方法创建的对象
6. 工厂方法一般不提供给外部使用(用protected修饰)
7. 可以使用工厂方法模式来连接平行的类层次
@@@工厂方法模式的优点 :
1. 可以在不知道所依赖的对象的具体实现的情况下编程
2. 更容易扩展对象的新版本
@@@工厂方法模式的缺点 :
1. 具体产品对象和工厂方法的耦合性
@@@工厂方法模式的本质:
延迟到子类来选择实现
@@@工厂方法模式体现的设计原则 :
依赖倒置原则
- 工厂方法模式(Factory Method)
- Factory Method(工厂方法模式)
- 工厂方法模式(Factory Method)
- 工厂方法模式(Factory Method)
- 工厂方法模式(Factory Method)
- 工厂方法模式 Factory Method
- 工厂方法模式(Factory Method)
- 工厂方法模式(Factory Method)
- 工厂方法模式(Factory Method)
- Factory Method-----工厂方法模式
- 工厂方法模式--Factory Method
- Factory Method工厂方法模式
- Factory Method - 工厂方法模式
- 工厂方法模式(Factory Method)
- 工厂方法模式 Factory Method
- 工厂方法(Factory Method)模式
- 工厂方法模式(Factory Method)
- 工厂方法模式(Factory Method)
- c#学习笔记--数组、枚举、结构、值类型和引用类型
- xp 笔记本 取消 嘟嘟声
- Struts2+JQuery(Ajax) 连接并读取SQLServer数据
- 敏捷软件开发模型--SCRUM
- 无锁队列的实现
- 工厂方法模式(Factory Method)
- C语言预处理命令
- JS 学习5 json
- C# 多线程的创建
- moosefs相关
- PreparedStatement与Statement区别
- socket.error: [Errno 10061]解决方法
- android系统锁屏详解【android锁屏解析二】
- STM32 启动文件解析