c++之工厂方法模式

C++中的工厂方法模式 工厂方法模式通过定义一个创建对象的接口,将对象的实际创建工作推迟到子类中实现,从而实现了解耦和扩展性。 阅读详情

定义:

工厂方法模式属于创建型模式,用于定义一个用于创建对象的接口,让子类决定实例化哪一个类,即将实际创建工作推迟到子类当中进行。

它的核心角色有4个,分别是抽象工厂以及具体工厂,抽象产品以及具体产品。

类图:

通过类图可知,工厂方法即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,而这个具体的工厂就只负责生产对应的产品。

工厂方法模式完全符合开发封闭原则,扩展性强。

应用场景:

假设我们想生产啤酒和白酒,可以考虑新建一个啤酒工厂和一个白酒工厂,然后把这两个工厂的共同点抽象出来,即抽象工厂类

,把啤酒和白酒的共同点抽象出来,即酒类。为什么要抽象出来呢,一是便于接下来复用抽象类,可能我们后面还需要一个生产红酒,就可以让红酒类继承抽象酒类,

红酒工厂继承抽象工厂类,可以减少相同的代码量,二是可以用抽象类指针实现不同子类的接口,实现多态,便于后期扩展和维护代码。

代码:

#include <iostream>

using namespace std;

//抽象产品
class IWine
{
public:
	virtual ~IWine() {}
	virtual void createWine() = 0;
};

//抽象工厂类
class IFactory
{
public:
	virtual ~IFactory() {}
	virtual IWine* createFactory() = 0;
};

//啤酒-具体产品
class Beer :public IWine
{
public:
	void createWine()
	{
		cout << "生产啤酒" << endl;
	}
};

//白酒-具体产品
class Spirit :public IWine
{
public:
	void createWine()
	{
		cout << "生产白酒" << endl;
	}
};


//啤酒工厂-生产啤酒
class BeerFactory :public IFactory
{
public:
	IWine* createFactory()
	{
		return new Beer;
	}
};

//白酒工厂-生产白酒
class SpiritFactory :public IFactory
{
public:
	IWine* createFactory()
	{
		return new Spirit;
	}
};


int main()	//客户端
{
	IFactory *factory = new BeerFactory;
	//IFactory *factory = new SpiritFactory;
	factory->createFactory()->createWine();

	if (factory) delete factory;

	getchar();

	return 0;
}

输出:

 

C++ 工厂方法模式(Factory Method) Creator.h: #ifndef CREATOR_H_ #define CREATOR_H_ ​ #include <memory> #include "Product.h" ​ // 抽象工厂类 生产电影 class Factory { public: virtual std::shared_ptr<Movie> get_movie() = 0; }; ​ #endif // CREATOR_H_ ConcreteCreator.h: #ifndef CONC 阅读详情

相关推荐

C++ 工厂方法模式

工厂方法模式(Factory Method Pattern)是一种常用的对象创建型设计模式,此模式的核心思想是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用以及方便后期维护拓展的目的。

青春不老,奋斗不止! 1万+

《设计模式之禅》(第2版)

第一部分 大旗不挥 谁敢冲锋 —— 6大设计原则全新解读 第1章 单一职责原则 单一职责原则,SingleResponsibilityPrinciple,简称SRP,有且只有一个原因引起类/接口的变更;即一个接口/类只有一个职责,只负责一件事情。 单一职责的好处: 类的复杂性降低。实现什么职责都有清晰明确的定义; 可读性提高,复杂性降低; 可维护性提高; 变更引起的风险降低 面向接口编程,对于接口的设计要求接口职责做到单一。 单一职责原则使用于接口、类,同时使用于方法。保证一个方法...

墨雨的博客 2729

设计模式之蝉

高清版的设计模式之蝉(第二版),附个人看书笔记,Java语言。

设计模式之禅-思考上

6大基本原则 程序是面向现实的抽象。 单一职责:类的功能尽量单一,职责单一,只干一类事情。应该有且仅有一个原因引起类的变更。这个要根据实际项目来设计 类的职责。尽量做到单一。 里式替换 :所有引用基类的地方必须能透明的使用其子类的对象。就是说 有可能变化的地方,和耦合的地方 尽量使用 接口或者抽象父类 声明参数。这样后期容易修改。 依赖倒置 :高层模块不应该依赖低层模块,两者都应该依赖其抽象。抽象...

zhangxi1224的博客 474

设计模式之禅电子版(百度网盘下载【包含链接与提取码】)

设计模式之禅,一种思想书,会一直受益,初学,工作一年,三年认识都不一样。 也算是软件开发的思想启蒙,看书介绍说:能让你设计一个优秀的代码结构,写一段健壮的代码,比较容易的解决一些复杂的需求。

Sharding-JDBC 系列专题 - 第九篇:高可用性与集群管理

高可用性是指系统在面对故障(如数据库宕机、网络中断)时,能够快速恢复并继续提供服务。Sharding-JDBC 和 Sharding-Proxy 提供了多种机制支持高可用性,同时需要结合底层数据库的高可用方案(如 MySQL 主从复制、MHA)来实现。高可用性和集群管理是 Sharding-JDBC 和 Sharding-Proxy 在生产环境中成功应用的关键。本篇详细介绍了数据库高可用方案、Sharding-JDBC 的故障切换机制、Sharding-Proxy 的集群部署,以及分布式治理功能。

资深架构师分享:深入剖析软件架构,探讨云计算、微服务、大数据等前沿技术。分享实践经验,促进技术交流,共同构建卓越系统。 1393

设计模式之禅学习笔记

设计模式是软件工程中的经典解决方案,旨在解决常见设计问题并提高代码的可维护性和可扩展性。23种设计模式分为创建型、结构型和行为型三大类。 创建型模式:包括工厂方法、抽象工厂、单例、建造者和原型模式,主要关注对象的创建过程,确保系统独立于对象的创建、组合和表示。 结构型模式:包括适配器、桥接、组合、装饰、外观、享元和代理模式,主要关注类和对象的组合,简化设计并提高系统灵活性。 行为型模式:包括责任链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法和访问者模式,关注对象间的责任分配和通信。

欢迎来到【技术拾光者】,在这里,我们专注分享编程教程、技术趋势、实战案例和优质资源。不定期举办技术问答、专家访谈和职业指导。加入我们,共同探索技术世界,提升技能,拓展职业道路! 999

【Unity Animation 2D】从零到一:骨骼绑定与IK动画实战指南

本文详细介绍了Unity中2D骨骼绑定与IK动画的实战流程,从角色素材准备、骨骼系统创建到权重绘制和IK设置,逐步指导开发者掌握2D动画制作技巧。通过反向动力学(IK)技术,实现更自然的角色动画效果,适用于游戏开发和动画制作。

weixin_30430677的博客 370

设计模式 - C++ 工厂方法模式 - Factory Method Pattern in C++

设计模式 - C++ 工厂方法模式 - Factory Method Pattern in C++ Design patterns are typical solutions to common problems in software design. 设计模式是软件设计中常见问题的典型解决方案。设计模式是针对软件设计中常见问题的工具箱,其中的工具就是各种经过实践验证的解决方案。 1. Factory Method - 工厂方法 Factory Method is a creational design

程永强 1532

高空抛物监控系统:基于YOLOv8的轨迹追踪与可视化系统

本文详细介绍了一种基于YOLOv8深度学习模型的高空抛物监控系统,该系统能够实时检测并追踪高层建筑抛掷物的运动轨迹。文章包含完整的系统设计思路、算法实现细节、数据集构建方法以及基于PyQt5的可视化界面开发过程。我们提供了完整的Python实现代码,并讨论了系统的性能优化策略和实际部署考量。此外,我们还推荐了几个公开可用的高空抛物数据集,并详细分析了系统的应用前景和技术挑战。

YOLO 446

AI上推荐 之 协同过滤

㐇

Miracle8070 1万+

C++实现工厂方法模式Factory Method Pattern

工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

优快云er_2015的博客 447

YOLO系列算法改进 | Neck改进篇 | 融合FAAFusion傅里叶角度对齐模块 | 攻克多尺度方向特征冲突,角度检测精度飙升! | CVPR 2026

YOLO系列算法改进 | Neck改进篇 | 融合FAAFusion傅里叶角度对齐模块 | 攻克多尺度方向特征冲突,角度检测精度飙升! | CVPR 2026 (以YOLO26最新目标检测模型为基础,利用FAAFusion傅里叶角度对齐模块改进Neck部分)

2502_91881744的博客 315

C++工厂方法模式(Factory Method Pattern)

#ifndef LOGGER_H #define LOGGER_H#include <iostream> #include <string> class Logger { public: virtual void writeLog() = 0; };class DatabaseLogger : public Logger { public: void

李御风的博客 659

基于全局和局部接受性因果特征的广义学习模型,用于在线增量机械故障诊断

本文提出了一种**因果广义学习模型(CBLM)**,用于在线增量机械故障诊断。该模型结合了**全局因果特征**(时域、频域、故障特征频率均值)和**多尺度局部因果特征**(通过扩张卷积提取),构建了一个具有**增量学习能力**的广泛学习系统(BLS)。CBLM支持**结构增量学习**(增加增强节点)和**样本增量学习**(动态更新权重),无需重新训练整个模型,显著提高了计算效率和诊断精度。在两个滚动轴承数据集上的实验表明,CBLM在诊断准确性和训练时间上均优于传统深度学习模型,适用于在线实时故障诊断。

huanghm88的专栏 387

机器学习实战——疫情数据分析与预测

机器学习如何做到疫情可视化——疫情数据分析与预测实战 本文将带领大家爬取11个国家以及中国31个省(自治区、直辖市)在2022.0101-2022.06.19的新冠疫情数据。并且采用机器学习模型对2022.6.20-2022.6.30每一天的全国确诊人数、死亡人数、治愈人数进行预测,**做出疫情可视化图形并且求出最终的相关系数R2!...

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 10万+

c++工厂方法模式

工厂·方法模式

燃犀的博客 226

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

(C++实现)——工厂方法模式(Factory Method Pattern)

工厂方法模式不同于简单工厂模式的地方在于工厂方法模式把对象的创建过程放到里子类里。这样工厂父对象和产品父对象一样,可以是抽象类或者接口,只定义相应的规范或操作,不涉及具体的创建或实现细节。  其类图如下:  实例代码为: [cpp] view plaincopy #pragma once   class IProduct

晴天的专栏 1030

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++工厂方法模式(Factory Method Pattern)

意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类。该模式使一个类的实例化延迟到其子类。 动机 框架使用抽象类定义和维护对象之间的关系。这些对象的创建通常也由框架负责。 适用性 当一个类不知道它所必须创建的对象的类的时候。 当一个类希望由它的子类来指定它创建的对象的时候。 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。 类图 例子场景 实现 输出 ...

q351477的博客 299

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C++11:工厂方法模式

而工厂方法模式通过引入抽象工厂和具体工厂,每个具体工厂负责创建对应的产品,这样新增产品时只需添加新的工厂和产品类,不需要修改已有代码,符合开闭原则。然后,我需要设计类结构。在思考过程中,我需要确保没有遗漏C++11的特性应用,比如是否还有其他的特性可以应用,比如基于范围的for循环或者移动语义等,但在这个例子中,可能主要用到的还是override、unique_ptr、auto和nullptr。比如,在简单工厂中,所有产品由一个工厂类创建,而工厂方法模式中每个产品有自己的工厂类,这样扩展性更好。

780

设计模式之工厂方法模式(C++实现)

工厂方法模式介绍,包括应用场景,优缺点,模式结构,类图 以及 C++代码示例

墨1024 1308

工厂方法模式的C++实现示例

工厂方法模式是一种创建型设计模式,它允许子类决定实例化哪个类。下面是一个基于C++11的工厂方法模式的示例,展示了如何通过工厂类来创建不同类型的对象。

wwplh5520370的博客 274

C++工厂方法模式

C++工厂方法模式 #include <iostream> #include <fstream> #include <string> using namespace std; void main() { ifstream ifs; ifs.open("main.cpp", ios::in); if (!ifs) { cout << "文件...

weixin_44567289的博客 184

[C++]工厂方法模式

工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。 C++代码如下: // 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //...

就是那个党伟 396

C++创建型模式之工厂方法模式

工厂方法模式通过将对象的创建延迟到子类来实现了灵活的对象创建机制。在GUI视图创建的示例中,工厂方法模式允许我们为同一CAD模型创建不同的视图(表格视图和图形视图),并且可以在不修改已有代码的情况下扩展新的视图类型。Factory Method 模式和 C++ Template 都是在解决对象创建和代码复用的问题,但它们的实现机制和适用场景有所不同。Factory Method 模式通过运行时多态提供了灵活的对象创建机制,适合需要根据不同条件创建不同类型对象的场景。

捕鲸叉的专栏 1287
上一篇: c++之代理模式
下一篇: c++之抽象工厂模式
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值