class Document {
public:
virtual ~Document() = default;
virtual void generate() = 0;
};
#include "Document.h"
#include
class PdfDocument : public Document {
public:
void generate() override {
std::cout << "Generating PDF document\n";
}
};
#include "Document.h"
#include
class HtmlDocument : public Document {
public:
void generate() override {
std::cout << "Generating HTML document\n";
}
};
#include "Document.h"
#include
class TxtDocument : public Document {
public:
void generate() override {
std::cout << "Generating TXT document\n";
}
};
#include "Document.h"
class DocumentFactory {
public:
virtual ~DocumentFactory() = default;
virtual Document* createDocument() = 0; // 工厂方法
};
#include "DocumentFactory.h"
#include "PdfDocument.h"
class PdfFactory : public DocumentFactory {
public:
Document* createDocument() override {
return new PdfDocument();
}
};
#include "DocumentFactory.h"
#include "HtmlDocument.h"
class HtmlFactory : public DocumentFactory {
public:
Document* createDocument() override {
return new HtmlDocument();
}
};
#include "DocumentFactory.h"
#include "TxtDocument.h"
class TxtFactory : public DocumentFactory {
public:
Document* createDocument() override {
return new TxtDocument();
}
};
#include
#include "PdfFactory.h"
#include "HtmlFactory.h"
#include "TxtFactory.h"
int main() {
// 假设用户选择导出类型
std::string choice = "pdf"; // 可改为 "html" 或 "txt"
DocumentFactory* factory = nullptr;
if (choice == "pdf") {
factory = new PdfFactory();
} else if (choice == "html") {
factory = new HtmlFactory();
} else if (choice == "txt") {
factory = new TxtFactory();
}
if (factory) {
Document* doc = factory->createDocument();
doc->generate();
delete doc;
delete factory;
}
return 0; 