工厂方法模式的定义:
定义一个用于创建对象的接口,让子类决定实例化哪个类,工厂方法使类的实例化延迟到其子类。
demo:下面使用工厂模式写一个简单的数据不同方式导出的程序
ExportFileAPi:导出对文件对象对接口
ExportDB:导出到数据库
ExportTxtFile:导出到txt
ExportOperate:实现导出数据对业务功能对象
ExportDbFileOperate:实现创建导出数据库格式的对象
ExportTxtFileOperate:实现创建导出文本文件格式的对象
Client:客户端
/**
* 导出对文件对象对接口
*/
public interface ExportFileAPi {
/**
* 导出内容成文件
* @param data
* @return
*/
boolean export(String data);
}
/**
* 导出到数据库
*/
public class ExportDB implements ExportFileAPi{
@Override
public boolean export(String data) {
System.out.println("导出数据" + data + "到数据库");
return true;
}
}
/**
* 导出到txt
*/
public class ExportTxtFile implements ExportFileAPi{
@Override
public boolean export(String data) {
System.out.println("导出数据" + data + "到文本数据");
return true;
}
}
/**
* 实现导出数据对业务功能对象
*/
public abstract class ExportOperate {
protected abstract ExportFileAPi factoryMethod();
public boolean export(String data) {
ExportFileAPi api = factoryMethod();
return api.export(data);
}
}
/**
* 实现创建导出数据库格式的对象
*/
public class ExportDbFileOperate extends ExportOperate
{
@Override
protected ExportFileAPi factoryMethod() {
return new ExportDB();
}
}
/**
* 实现创建导出文本文件格式的对象
*/
public class ExportTxtFileOperate extends ExportOperate{
@Override
protected ExportFileAPi factoryMethod() {
// 导出生成文件格式到对象
return new ExportTxtFile();
}
}
public class Client {
public static void main(String[] args) {
ExportOperate exportOperate = new ExportDbFileOperate();
exportOperate.export("测试数据");
}
}
工厂方法模式的功能:
工厂模式的主要功能是让父类在不知道具体实现的情况下完成功能的调用,而具体的实现延迟到子类来实现。
工厂方法模式的优点:
可以在不知具体实现的情况下编程
更容易扩展对象的新版本
工厂方法模式的缺点:
具体产品对象和工厂方法的耦和性