C++工厂方法模式

  1. 1 简介: 工厂方法模式是一种创建型设计模式,用于通过一个公共接口来创建具体对象,而无需在客户端代码中显式指定其具体类。它将对象的实例化委托给工厂类,由工厂类根据客户端的请求创建相应的对象。

  2. 2 实现步骤: 以下是使用C++实现工厂方法模式的步骤:

    a. 定义产品接口:首先,定义一个产品接口,该接口声明了产品类的公共方法。

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

    b. 实现具体产品类:创建实现产品接口的具体产品类。

    class ConcreteProductA : public Product {
    public:void operation() override {// 具体产品A的操作}
    };class ConcreteProductB : public Product {
    public:void operation() override {// 具体产品B的操作}
    };
    

    c. 定义工厂接口:创建一个工厂接口,声明用于创建产品的工厂方法。

    class Factory {
    public:virtual Product* createProduct() = 0;
    };
    

    d. 实现具体工厂类:创建具体工厂类来实现工厂接口,根据客户端的请求创建相应的产品。

    class ConcreteFactoryA : public Factory {
    public:Product* createProduct() override {return new ConcreteProductA();}
    };class ConcreteFactoryB : public Factory {
    public:Product* createProduct() override {return new ConcreteProductB();}
    };
    

    3 示例代码: 以下是一个使用工厂方法模式的示例代码:

    #include <iostream>int main() {// 使用具体工厂A创建产品AFactory* factoryA = new ConcreteFactoryA();Product* productA = factoryA->createProduct();productA->operation();// 使用具体工厂B创建产品BFactory* factoryB = new ConcreteFactoryB();Product* productB = factoryB->createProduct();productB->operation();delete factoryA;delete factoryB;delete productA;delete productB;return 0;
    }
    

  3. 上述代码中,客户端使用不同的具体工厂来创建不同的产品,并调用产品的操作方法。

  4. 4 优点:

    • 将对象的创建与使用分离,降低耦合性。
    • 客户端代码无需知道具体产品类,只需要关心产品接口。
    • 可以灵活扩展新的产品和工厂,符合开闭原则。
  5. 5 注意事项:

    • 工厂方法模式适用于创建复杂对象或对象构建过程需要进行某些额外处理的场景。
    • 使用工厂方法模式时,需确保每个具体产品都对应一个具体工厂。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/47395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

abap 增强MB_DOCUMENT_BADI调试

在MB_DOCUMENT_BEFORE_UPDATE打上内部断点;在MB_DOCUMENT_ UPDATE打上外部断点在MB_DOCUMENT_BEFORE_UPDATE调试界面Settings-Display/Change Debugger Settings-Update Debugging

深入浅出Pytorch函数——torch.nn.init.constant_

分类目录&#xff1a;《深入浅出Pytorch函数》总目录 相关文章&#xff1a; 深入浅出Pytorch函数——torch.nn.init.calculate_gain 深入浅出Pytorch函数——torch.nn.init.uniform_ 深入浅出Pytorch函数——torch.nn.init.normal_ 深入浅出Pytorch函数——torch.nn.init.c…

Mac更新homebrew时卡住的解决办法

Mac更新homebrew时卡住的解决办法 引起问题的原因brew命令安装软件跟这3个仓库地址有关1、brew2、homebrew-core3、homebrew-bottles4、若/bin/zsh&#xff0c;则输入5、若/bin/bash&#xff0c;则输入6、更新brew 引起问题的原因 知其然&#xff0c;还要知其所以然。brew的更…

# 电脑好用的工具推荐

电脑好用的工具推荐 文章目录 电脑好用的工具推荐必装工具浏览器火绒安全卸载工具Geek迅雷 记笔记工具Typora印象笔记 开发工具IntelliJ IDEAVisual Studio CodeDbeaverAnother Redis Desktop Manager 备份工具百度网盘阿里云盘一刻相册蓝奏云 必装工具 浏览器 就别装那些乱七…

https非对称加密算法

非对称加密算法原理 在客户端公开公钥&#xff0c;服务端保存私钥 1.客户端第一次请求先请求443端口&#xff0c;从443端口下载公钥。 2.客户端将数据进行公钥算法进行加密&#xff0c;将秘文发送到服务端 服务端收到秘文后&#xff0c;通过私钥算法进行解密得到明文数据。…

服务器为什么会被攻击?43.248.186.x

进入信息时代&#xff0c;各种行业对数据的安全和技术要求也越来越高,同时也遇到了各种各样的服务器故障问题,但是网络攻击才是最大的伤害&#xff0c;在这上面造成了企业不必要的损失,那么服务器为什么会被攻击&#xff0c;这里给大家讲解一下服务器被攻击有哪几种情况 一、服…

Oracle异常ORA-01861:literal does not match format string

主要原因还是数据格式不匹配。 我这里报这个错误是因为查询的时候&#xff0c;数据库的字段类型是日期&#xff0c;匹配传进去的参数是字符串类型的&#xff0c;这样使用mysql倒不会报错&#xff0c;但是oracle数据库会。 解决方案 日期要以24小时的形式显示出来&#xff0c;加…

cuda gdb调试

如果cudaDeviceEnablePeerAccess函数不支持或不起作用&#xff0c;您仍然可以尝试其他方法来实现GPU之间的数据交换和通信。以下是一些替代方法&#xff1a; 通过主机内存进行数据传输&#xff1a; 如果GPU之间的数据交换不是非常频繁&#xff0c;您可以将数据从一个GPU复制到…

《Linux从练气到飞升》No.16 Linux 进程地址空间

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…

Kotlin差异化分析,let,run,with,apply及also

作用域函数是Kotlin比较重要的一个特性&#xff0c;共分为以下5种&#xff1a;let、run、with、apply 以及 also&#xff0c;这五个函数的工作方式可以说非常相似&#xff0c;但是我们需要了解的是这5种函数的差异&#xff0c;以便在不同的场景更好的利用它。 读完这篇文章您将…

厦门理工学院采购ZJ-3型D33系数测试仪和PZT-JH30/1型压电PVDF薄膜极化装置成套设备

厦门理工学院采购ZJ-3型D33系数测试仪和PZT-JH30/1型压电PVDF薄膜极化装置成套设备 厦门理工学院&#xff08;Xiamen University of Technology&#xff09;&#xff0c;位于福建省厦门市&#xff0c;是福建省重点建设高校、福建省A类一流应用型建设高校、教育部“卓越工程师教…

【NepCTF2023】复现

文章目录 【NepCTF2023】复现MISC与AI共舞的哈夫曼codesc语言获取环境变量 小叮弹钢琴陌生的语言你也喜欢三月七么Ez_BASIC_IImisc参考 WEBez_java_checkinPost Crad For You独步天下配置环境独步天下-镜花水月环境变量提权 独步天下-破除虚妄总结 独步天下-破除试炼_加冕成王知…

耕地单目标语义分割实践——Pytorch网络过程实现理解

一、卷积操作 &#xff08;一&#xff09;普通卷积&#xff08;Convolution&#xff09; &#xff08;二&#xff09;空洞卷积&#xff08;Atrous Convolution&#xff09; 根据空洞卷积的定义&#xff0c;显然可以意识到空洞卷积可以提取到同一输入的不同尺度下的特征图&…

Excel/PowerPoint条形图改变顺序

条形图是从下往上排的&#xff0c;很多时候不是我们想要的效果 解决方案 选择坐标轴&#xff0c;双击&#xff0c;按下图顺序点击 效果

dockerfile编写LNMP

目录 1. 项目环境 2. 服务器环境 二、部署nginx&#xff08;容器IP为192.168.158.26&#xff09; 1、整个Dockerfile文件内容 ​编辑 2、配置nginx.conf文件 3、构建镜像 三、部署mysql 1、整个Docker文件内容 3、生成镜像 4、启动镜像容器 5、验证mysql 四、PHP部署 1…

【STM32CubeMX】低功耗模式

前言 本文讲解STM32F10X的低功耗模式&#xff0c;部分资料参考自STM32手册。STM32F10X提供了三种低功耗模式&#xff1a;睡眠模式&#xff08;Sleep mode&#xff09;、停机模式&#xff08;Stop mode&#xff09;和待机模式&#xff08;Standby mode&#xff09;。这些低功耗模…

Yarn介绍及快速安装 - Debian/Ubuntu Linux

1.Yarn介绍 Yarn 是一个用于管理 JavaScript 包的快速、可靠和安全的包管理器。它是由 Facebook、Google、Exponent 和 Tilde 团队共同开发的&#xff0c;旨在提供比 npm 更快速、可靠的包管理体验。 以下是 Yarn 的一些主要特点和优势&#xff1a; 快速安装&#xff1a;Yarn…

推荐三款Scrum敏捷项目管理工具/敏捷管理实践

免费版敏捷工具推荐&#xff1a; Leangoo领歌 Leangoo领歌是ScrumCN&#xff08;scrum.cn&#xff09;旗下的一款永久免费的专业敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、缺陷管理、统计度量等。包括小…

管理类联考——逻辑——真题篇——按知识分类——汇总篇——一、形式逻辑——假言——第六节 真假话题

文章目录 第六节 假言命题-真假话题-①建模;②公式化处理;③找矛盾(易找且唯一确定):A→B的矛盾命题:A且非B(真假判断,必一真一假);④包含,⑤定其余。真题(2011-50)-假言-真假-①建模;②公式化处理;③找矛盾(易找且唯一确定):A→B的矛盾命题:A且非B(真假判…

2023国赛数学建模A题思路模型代码汇总 高教社杯

本次比赛我们将会全程更新思路模型及代码&#xff0c;大家查看文末名片获取 之前国赛相关的资料和助攻可以查看 2022数学建模国赛C题思路分析_2022国赛c题matlab_UST数模社_的博客-CSDN博客 2022国赛数学建模A题B题C题D题资料思路汇总 高教社杯_2022国赛c题matlab_UST数模社…