#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;
}