《设计模式之禅(第2版)》——C++简单工厂实现

C++教程(二):C++设计模式之工厂模式详细解析以及工厂模板类实现 在 C++ 中,工厂模式(Factory Pattern) 是一种创建型设计模式,它通过定义一个接口来创建对象,而不是直接实例化具体的类。这种模式的主要目的是将对象的创建过程封装起来,以便在不修改客户端代码的情况下轻松扩展新类型的对象。 阅读详情

《设计模式之禅(第2版)》的读书笔记,原书是用java写的,由于C++语法和java语法还是有差异的,故自己用C++实现了一遍,其中难免不会有疏漏,望大家不吝赐教。

在这里插入图片描述
其中的NvWa就是main方法,这里没有单独使用类。其余的都与该图相同。

Human.h

#pragma once
class Human {
public:
	virtual void getColor() = 0;
	virtual void talk() = 0;
	virtual ~Human() {};
};

BlackHuman.h

#pragma once
#include "Human.h"
#include <iostream>
using namespace std;

class BlackHuman : public Human
{
public:
	void getColor()
	{
		std::cout << "黑色人种的皮肤颜色是黑的!" << endl;
	}

	void talk()
	{
		std::cout << "黑人会说话,一般人听不懂" << endl;
	}
};

WhiteHuman.h

#pragma once
#include "Human.h"
#include <iostream>
using namespace std;

class WhiteHuman : public Human
{
public:
	void getColor()
	{
		std::cout << "白人种的皮肤颜色是白色的!" << endl;
	}

	void talk()
	{
		std::cout << "白色人种会说话,一般说的都是单字节。" << endl;
	}
};

YellowHuman.h

#pragma once
#include "Human.h"
#include <iostream>
using namespace std;

class YellowHuman : public Human
{
public:
	void getColor()
	{
		std::cout << "黄色人种的皮肤颜色是黄色的!" << endl;
	}

	void talk()
	{
		std::cout << "黄色人种会说话,一般说的都是双字节。" << endl;
	}
};

AbstractFactory.h

#pragma once
#include <string>
#include <vector>
#include "Human.h"

class AbstractFactory
{
public:
	virtual Human *createHuman(std::string somehuman) = 0;
	~AbstractFactory() {}
};

HumanFactory.h

#pragma once
#include "AbstractFactory.h"
#include "Human.h"
#include "WhiteHuman.h"
#include "BlackHuman.h"
#include "YellowHuman.h"

class HumanFactory : public AbstractFactory
{
	Human *createHuman(std::string somehuman) override
	{
		if (somehuman == "black")
		{
			return new BlackHuman();
		}
		else if (somehuman == "white")
		{
			return new WhiteHuman();
		}
		else if (somehuman == "yellow")
		{
			return new YellowHuman();
		}

		return NULL;
	}
};

main.cpp文件:

#include <iostream>
#include "AbstractFactory.h"
#include "Human.h"
#include "HumanFactory.h"

int main()
{
	AbstractFactory *factory = new HumanFactory();
	Human *whiteHuman = factory->createHuman("white");
	whiteHuman->getColor();
	whiteHuman->talk();
	delete whiteHuman;

	std::cout << std::endl;

	Human *blackHuman = factory->createHuman("black");
	blackHuman->getColor();
	blackHuman->talk();
	delete blackHuman;

	std::cout << std::endl;

	Human *yellowHuman = factory->createHuman("yellow");
	yellowHuman->getColor();
	yellowHuman->talk();

	delete factory;
	delete yellowHuman;

	return 0;
}

运行结果:
在这里插入图片描述

【C++ 设计模式】简单工厂模式 在软件开发中,设计模式是解决特定问题的可复用解决方案。其中,简单工厂模式是一种创建型设计模式,旨在封装对象的创建过程,并将对象的创建与使用分离。这种模式提供了一个统一的接口,用于根据给定的参数或条件创建对象,使得客户端代码无需关心具体对象的创建细节。本文将介绍简单工厂模式的概念、结构以及如何在 C++ 中实现。简单工厂模式是一种简单但有效的设计模式,用于封装对象的创建过程。通过将对象的创建逻辑放在一个工厂类中,客户端代码可以通过统一的接口来请求对象,而无需关心具体对象的创建细节。 阅读详情

相关推荐

C++设计模式之禅

C++设计模式之禅 ,学习设计模式必选按资料,很经典PDF资料。

27种设计模式C++实现——抽象工厂

1. 抽象产品类 2. 具体产品类 3. 抽象工厂 4. 具体工厂类

Aletenze的专栏 248

设计模式Lexi C++版

在Gof的设计模式第二章提出了文档编辑器Lexi,可一直未找到C++版本源码,这是我在Visual Studio2013下实现的C++版Lexi,实现了富文本编辑的主要编辑功能,供大家交流、学习。

设计模式 - C(C++)

设计模式 - C(C++)版本

莫忘输赢的博客 458

设计模式之禅 设计模式

设计模式之禅详细的说明了进行程序设计的一种编程思想,希望对你有所帮助!

C++ Design Pattern 23种设计模式(全_解释+源代码).zip

C++ 23种设计模式(全_解释+源代码).zip 23种设计模式都是基于以下原则,务必记牢 依赖倒转原则 里氏代换原则 开闭原则 接口隔离原则 合成聚合复用原则 迪米特法则 23种设计模式如下:

设计模式_C++源码+总结

C++源码下载:   http://yunpan.cn/Q7fadjGgEJxib 提取码 63cb 总结:    转载于:https://www.cnblogs.com/uestc999/p/3950002.html

weixin_30912051的博客 178

Qt·DBus快速入门

DBus快速入门

m0_64560763的博客 2274

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

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

墨雨的博客 2730

Monocle2拟时轨迹基因模块的GO富集解析

本文详细解析了如何对Monocle2拟时分析中得到的基因表达模块进行GO富集分析。通过从热图对象中提取聚类模块,并利用clusterProfiler等工具进行功能注释,将抽象的基因表达时序模式转化为可解释的生物学功能主题,如免疫应答、细胞外基质组织等,从而深入理解细胞命运转变的驱动机制。

gpt4scribbler的博客 501

PAT|中国大学MOOC-浙江大学翁恺-C语言程序设计习题集(更新中)

##2-0. 整数四则运算 时间限制:400 ms 内存限制:65536 kB 代码长度限制:8000 B 判题程序:Standard 作者:乔林(清华大学) 本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。 输入格式: 输入在一行中给出2个正整数A和B。 输出格式: 在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。 输入样例: 3 ...

小鱼波波波 6万+

设计模式C++实现(1)——工厂模式

工厂模式属于创建型模式,大致可以分为三类,简单工厂模式、工厂方法模式、抽象工厂模式。

wuzhekai的专栏 17万+

从ViT到Swin Transformer:一文搞懂Transformer在CV中的进化史(附实战代码)

本文系统梳理了Transformer在计算机视觉领域的演进历程,从开创性的Vision Transformer(ViT)引入全局注意力机制,到DETR实现端到端目标检测,再到里程碑式的Swin Transformer通过滑动窗口和层次化设计高效桥接CNN与ViT。文章深入剖析了各模型的核心思想、技术突破与实战应用,并提供了可运行的代码示例,帮助读者从理论到实践全面掌握这一关键技术脉络。

cola5的博客 713

三种工厂模式的C++实现

引出工厂模式的设计问题◆ 1.为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题 n 多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如 new ×××;的代码。这里带来两个问题:客户程序员必须知道实际子类的名称(

爱冒险的技术宅 3万+

分布式协作方案:OpenClaw多节点部署与设备互联

主从架构或对等架构服务发现与注册机制负载均衡策略选择分布式任务队列优先级调度失败重试机制WebSocket实时通信数据同步引擎冲突解决策略健康检查机制故障自动转移数据复制与恢复通过分布式部署,OpenClaw可以支撑更大规模的业务场景,提供更稳定可靠的AI助手服务。在下一篇文章中,我们将深入探讨安全与权限管理的精细化策略。

gaoxiang_120的专栏 371

论文阅读:ICLR 2026 Breaking and Fixing Defenses Against Control-Flow Hijacking in Multi-Agent Systems

该论文首先系统阐述了控制流劫持攻击的核心机理。此类攻击通过操纵多智能体系统的编排机制,诱导系统执行非安全操作,进而实现敏感信息窃取。攻击者将恶意指令伪装成环境错误信息,借助可信代理传递至系统编排器,利用"困惑副手"漏洞绕过传统安全防线。该论文指出,现有防御方案如LlamaFirewall所依赖的对齐检查机制存在根本性局限——安全目标与功能需求之间存在不可调和的内在冲突。该论文的核心贡献体现在攻防两个维度。

CSPhD-winston的博客 495

C++设计模式 - 简单工厂,工厂方法和抽象工厂

知识的学习在于点滴记录,坚持不懈;知识的学习要有深度和广度,不能只流于表面,坐井观天;知识要善于总结,不仅能够理解,更知道如何表达! 目录 如果需要录屏资料,请私信邮箱shitou3000@qq.com获取。 ...

大秦坑王的专栏 2553

【同等学力】01-逻辑符号表达

F(x): x是确诊者,G(x):x有症状F(x): x是老人,G(x):x是宠物,L(x,y): x喜欢y。

super_mochi1 1881

C++设计模式之:工厂模式factory

it人员无论是使用哪种高级语言开发东东,想要更高效有层次的开发程序的话都躲不开三件套:数据结构,算法和设计模式。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案,使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式坚持七大原则:开闭原则,单一职责原则,里氏替换原则,依赖倒转原则,接口隔离原则,迪米特原则,合成复用原则,而各项设计模式又区分为三大模式,创建型模式,结构型模式,行为模式。

weixin_45068267的博客 2457

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

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

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

C++ 设计模式——工厂模式

工厂模式是一种创建对象的设计模式,主要用于将对象的创建与使用分离。它提供了一种接口来创建对象,但由子类决定实例化哪个类。工厂模式有几种变体,包括简单工厂模式、工厂方法模式和抽象工厂模式。

慢慢记录,慢慢更新。 2954

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

设计模式——简单工厂、工厂方法、抽象工厂介绍(附C++代码)

以下是我个人学习的笔记,如有错误恳请指出,欢迎讨论~

qq_45110569的博客 1394

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

《C++设计模式》工厂模式

介绍了C++设计模式种构造者模式的一种,工厂模式。

zwh1298454060的博客 1734

C++设计模式——工厂模式(Factory Pattern)

C++设计模式——工厂模式(Factory Pattern) 微信公众号:幼儿园的学霸 目录 文章目录C++设计模式——工厂模式(Factory Pattern)目录简单工厂模式工厂方法模式抽象工厂模式总结参考资料 工厂模式包括三种:简单工厂模式、工厂方法模式、抽象工厂模式。 工厂模式的主要作用是封装对象的创建,分离对象的创建和操作过程,用于批量管理对象的创建过程,便于程序的维护和扩展。 务必记住这个词:封装. 在工厂模式中,有什么想不通都可以思考一下这个词 简单工厂模式 简单工厂是工厂模式最简单的

leonardohaig的博客 1666

C++ 设计模式——简单工厂模式

简单工厂模式是一种创建型设计模式,通过一个工厂类来负责对象的实例。这种模式将对象创建的细节封装在工厂类中,客户端无需知道具体的创建过程,只需通过工厂类获取对象实例即可。

慢慢记录,慢慢更新。 1091

在C++中,工厂模式的思考(《C++20设计模式》及常规设计模式对比)

在看《C++20设计模式》一书中产生了疑惑,就是经典工厂模式与这一书中的讲解差别很大,在此分享我心中的疑惑。

Ten_years_star的博客 1267
上一篇: C++中基类的析构函数为什么要用virtual虚析构函数
下一篇: c++简单工厂模式、工厂方法模式与抽象工厂模式的实现和优缺点
hp_cpp
博客等级 码龄11年 310粉丝 218原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值