0

0

c++ 工厂模式怎么写 c++工厂方法模式教程

下次还敢

下次还敢

发布时间:2025-12-04 14:51:20

|

673人浏览过

|

来源于php中文网

原创

工厂方法模式通过定义创建对象的接口,由子类决定实例化类型。以文档导出为例,基类Document定义generate()接口,PdfDocument、HtmlDocument、TxtDocument实现具体生成逻辑;DocumentFactory声明createDocument()纯虚函数,各具体工厂如PdfFactory返回对应文档对象;客户端根据选择实例化具体工厂,调用createDocument()获取产品并使用,实现创建与使用的分离。优点包括符合开闭原则、降低耦合度、便于扩展,建议结合智能指针和映射优化管理。

c++ 工厂模式怎么写 c++工厂方法模式教程

工厂模式(Factory Pattern)是面向对象编程中常用的创建型设计模式之一。在 C++ 中,工厂方法模式能帮助你将对象的创建过程封装起来,使代码更灵活、易于扩展。下面通过一个清晰的例子来说明如何编写 C++ 的工厂方法模式。

什么是工厂方法模式

工厂方法模式定义了一个创建对象的接口,但由子类决定实例化哪一个类。工厂方法让类的实例化推迟到子类进行。这样客户端代码不需要直接依赖具体类,而是依赖抽象,提高了可维护性和可扩展性。

基本结构和实现步骤

我们通过一个简单例子:不同类型的文档导出器(如 PDF、HTML、TXT),展示工厂方法模式的写法。

1. 定义产品基类(抽象产品)

立即学习C++免费学习笔记(深入)”;

所有具体产品都继承自同一个基类或接口:

Document.h

class Document {
public:
    virtual ~Document() = default;
    virtual void generate() = 0;
};

2. 实现具体产品类

每种导出格式对应一个具体类:

PdfDocument.h

#include "Document.h"
#include 

class PdfDocument : public Document { public: void generate() override { std::cout << "Generating PDF document\n"; } };

HtmlDocument.h

#include "Document.h"
#include 

class HtmlDocument : public Document { public: void generate() override { std::cout << "Generating HTML document\n"; } };

TxtDocument.h

#include "Document.h"
#include 

class TxtDocument : public Document { public: void generate() override { std::cout << "Generating TXT document\n"; } };

3. 定义工厂基类(抽象工厂)

声明一个创建产品的纯虚函数:

XmxCms企业网站管理系统2.0
XmxCms企业网站管理系统2.0

原本这个程序只是本人两年前初学时练手的,最近拿出来进行了修改,所以叫XmxCms 企业网站管理系统2.0 开发环境:WinXP + VS2008 + SQLServer 2008 + Access开发语言:C#本程序采用 三层架构 + 抽象工厂设计模式 + Linq 实现,目前只做了Access 和 SQL Server ,默认数据库为Access,要更换数据库只需修改web.config 即可

下载

DocumentFactory.h

#include "Document.h"

class DocumentFactory { public: virtual ~DocumentFactory() = default; virtual Document* createDocument() = 0; // 工厂方法 };

4. 实现具体工厂类

每个工厂负责创建一种具体产品:

PdfFactory.h

#include "DocumentFactory.h"
#include "PdfDocument.h"

class PdfFactory : public DocumentFactory { public: Document* createDocument() override { return new PdfDocument(); } };

HtmlFactory.h

#include "DocumentFactory.h"
#include "HtmlDocument.h"

class HtmlFactory : public DocumentFactory { public: Document* createDocument() override { return new HtmlDocument(); } };

TxtFactory.h

#include "DocumentFactory.h"
#include "TxtDocument.h"

class TxtFactory : public DocumentFactory { public: Document* createDocument() override { return new TxtDocument(); } };

5. 使用工厂创建对象(客户端代码)

客户端不关心具体类型,只通过工厂接口创建对象:

main.cpp

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

}

优点与使用建议

工厂方法模式有以下几个优势:

  • 符合开闭原则:新增产品类型时,只需添加新的工厂类,无需修改现有代码
  • 解耦客户端与具体类,降低依赖
  • 便于统一管理对象创建逻辑

使用建议:

  • 用智能指针(如 std::unique_ptr)替代原始指针,避免内存泄漏
  • 可以用 map 映射字符串与工厂类,简化条件判断
  • 对于简单场景,静态工厂函数可能更轻量

基本上就这些。掌握工厂方法模式的关键在于理解“把创建交给子类”这一思想,在实际项目中合理应用可以显著提升代码结构质量。

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

616

2023.06.14

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

655

2023.06.21

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

470

2023.07.31

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

245

2023.08.01

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

2895

2023.08.11

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

505

2023.08.11

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

312

2023.08.31

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

426

2023.09.01

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

3

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.9万人学习

AngularJS教程
AngularJS教程

共24课时 | 2.8万人学习

CSS教程
CSS教程

共754课时 | 21.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号