#include <iostream>
#include <string>
using namespace std;
class ExportFileAPI
{
public:
virtual bool exportData(string data) = 0; // 纯虚函数
protected:
ExportFileAPI(){cout << "*******" << endl;} // 构造函数
};
//具体化的子类
class ExportTxtFile:public ExportFileAPI
{
public:
bool exportData(string data) // 实现纯虚函数
{
cout << "正在导出数据" << data << "到csv文件"<<endl;
return true;
}
};
class ExportDB:public ExportFileAPI
{
public:
bool exportData(string data) // 实现纯虚函数
{
cout << "正在导出数据" << data << "到数据库" << endl;
return true;
}
};
//实现一个ExportOperator的类,这个叫导出数据业务的功能对象
//它也是接口
class ExportOperator
{
public:
bool exportData(string data)
{
ExportFileAPI* pAPI = factoryMethod(); // 用父类指针接收子类对象指针
return pAPI->exportData(data); // 其实是调用子类自己实现的exportData虚函数
}
protected:
virtual ExportFileAPI* factoryMethod() = 0;// 纯虚函数
};
//具体的实现对象完成导出工作
class ExportTxtFileOperator :public ExportOperator
{
protected:
ExportFileAPI* factoryMethod() // 对纯虚函数的实现
{
cout << "1111111" << endl;
return new ExportTxtFile(); // new 了 class ExportTxtFile 对象
}
};
class ExportDBOperator :public ExportOperator
{
protected:
ExportFileAPI* factoryMethod() // 对纯虚函数的实现
{
return new ExportDB();
}
};
//客户端
int main()
{
ExportOperator* pOperator = new ExportTxtFileOperator(); // 赋给父类指针,多态
pOperator->exportData("Hello");
return 0;
}
简单工厂模式
于 2023-03-10 14:06:45 首次发布
文章展示了如何在C++中利用抽象类(ExportFileAPI)定义纯虚函数实现接口,通过子类(ExportTxtFile和ExportDB)实现具体导出功能。ExportOperator类作为业务接口,使用工厂方法创建具体导出对象并调用其导出数据的方法。在客户端,通过ExportOperator的多态性实现不同类型的导出操作。
摘要由CSDN通过智能技术生成