0

0

工厂模式在C++中怎样应用 简单工厂与抽象工厂对比

P粉602998670

P粉602998670

发布时间:2025-08-16 20:29:01

|

655人浏览过

|

来源于php中文网

原创

简单工厂通过参数决定创建何种产品,适用于产品少且变化少的场景;抽象工厂则通过接口创建相关产品族,支持扩展而不修改代码,适合复杂系统。

工厂模式在c++中怎样应用 简单工厂与抽象工厂对比

工厂模式在C++中主要用于解耦对象的创建与使用,提升代码的可维护性和扩展性。根据复杂度和应用场景的不同,常见的有简单工厂和抽象工厂两种形式。它们都能实现对象的动态创建,但在设计思路和适用范围上有明显区别

简单工厂(Simple Factory)

简单工厂不是设计模式中的“正式”模式,但非常实用。它通过一个工厂类根据传入的参数决定创建哪一种产品对象。

特点:

STORYD
STORYD

帮你写出让领导满意的精美文稿

下载
  • 只有一个工厂类负责所有产品的创建
  • 产品通常继承自同一个基类
  • 新增产品需要修改工厂类,违反开闭原则

示例代码:

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

class Product {
public:
    virtual void use() = 0;
    virtual ~Product() = default;
};

class ConcreteProductA : public Product {
public:
    void use() override { cout };

class ConcreteProductB : public Product {
    void use() override { cout };

class SimpleFactory {
public:
    static Product* createProduct(char type) {
        if (type == 'A') return new ConcreteProductA();
        if (type == 'B') return new ConcreteProductB();
        return nullptr;
    }
};

客户端只需调用

SimpleFactory::createProduct('A')
即可获得对应实例,无需知道具体类名。

抽象工厂(Abstract Factory)

抽象工厂是 GoF 23 种设计模式之一,用于创建一系列相关或依赖对象的接口,而无需指定具体类。

特点:

  • 定义一个创建产品的接口,由子类决定实例化哪一个工厂
  • 每个具体工厂可以生产一组相关的产品
  • 支持产品族的扩展,符合开闭原则

示例结构:

class ProductA {
public:
    virtual void feature() = 0;
};

class ProductB {
public:
    virtual void operation() = 0;
};

class AbstractFactory {
public:
    virtual ProductA createProductA() = 0;
    virtual ProductB
createProductB() = 0;
    virtual ~AbstractFactory() = default;
};

class ConcreteFactory1 : public AbstractFactory {
    ProductA createProductA() override { return new ConcreteA1(); }
    ProductB
createProductB() override { return new ConcreteB1(); }
};

class ConcreteFactory2 : public AbstractFactory {
    ProductA createProductA() override { return new ConcreteA2(); }
    ProductB
createProductB() override { return new ConcreteB2(); }
};

这样可以在运行时切换整个产品族,比如切换主题(深色/浅色 UI 组件),数据库驱动(MySQL/PostgreSQL)等场景。

对比总结

适用场景不同:

  • 简单工厂适用于产品种类少、变化不频繁的情况
  • 抽象工厂适用于需要创建多个相关对象,且这些对象构成一个产品族

扩展性差异:

  • 增加新产品时,简单工厂需要修改原有代码,不利于维护
  • 抽象工厂通过新增工厂类即可支持新产品族,无需修改已有代码

复杂度:

  • 简单工厂结构简单,易于理解和实现
  • 抽象工厂类层次较多,适合大型系统中对架构要求高的场景

基本上就这些。简单工厂适合小项目快速开发,抽象工厂更适合需要高内聚、松耦合的企业级应用。选择哪种,取决于你的系统是否需要支持多套产品组合。不复杂但容易忽略的是:别为了用模式而用,先看需求。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

653

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

244

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

280

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

513

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

250

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

384

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

523

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

594

2023.08.14

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 5.7万人学习

C 教程
C 教程

共75课时 | 3.8万人学习

C++教程
C++教程

共115课时 | 10.6万人学习

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

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