工厂方法
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类
场景:
- 比如连接池、线程池
- 隐藏对象真实类型
- 对象创建会有很多参数来决定如何创建
- 创建对象有复杂的依赖关系
背景
实现一个导出数据的接口,让客户选择数据的导出方式
C++
class IExport {
};
class ExportXml : public IExport {
};
class IExportFactory {
public:
virtual IExport *newExport() = 0;
};
class ExportXmlFactory : public IExportFactory {
public:
IExport *NewExport() {
IExport *temp = new ExportXml;
return temp;
}
};
class ExportData {
public:
ExportData(IExportFactory *factory) : factory(factory) {}
~ExportData() {
if (factory) {
delete factory;
factory = nullptr;
}
}
bool Export(const std::string &data) {
IExport *e = factory->newExport();
e->Export(data);
}
private:
IExportFactory *factory;
};
int main() {
ExportData ed(new ExportXmlFactory);
ed.Export("hello");
}
将工厂传递给需要的对象,又工厂去创建对象,传入不同的工厂就可以创建不同的对象
THE END
暂无评论内容