23种设计模式——工厂方法模式

定义:

一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其他子类。

工厂方法通用类图:

这个图更好理解

在工厂方法模式中,抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义;Creator为抽象创建类,也是抽象工厂,具体如何创建产品类是由具体的实现工厂ConcreteCreator完成的。

工厂方法模式的应用

工厂方法模式的优点

良好的封装新,代码结构清晰。一个对象创建是有约束条件的,如一个调用者需要一个具体的产品对象,只要知道这个产品的类名(或者约束字符串)就可以了,不知奥创建对象的艰辛过程,降低模块间的耦合。

工厂方法模式是经典的解耦框架。高层模块只需要知道产品的抽象类,其他的实现类都不用关心。符合迪米特法则,我不需要就不要去交流;也符合依赖倒置原则,只依赖产品的抽象;当然也符合里氏替换原则,使用产品子类替换产品父类。

#include <iostream>using namespace std;
class Product
{
public:virtual void show() = 0;
};
class Factory
{
public:virtual Product* CreateProduct() = 0;
};
class ProductA : public Product
{
public:void show(){cout << "I'm ProductA" << endl;}
};
class ProductB : public Product
{
public:void show(){cout << "I'm ProductB" << endl;}};
class FactoryA : public Factory
{
public:Product* CreateProduct(){return new ProductA();}
};
class FactoryB : public Factory
{
public:Product* CreateProduct(){return new ProductB();}
};
int main()
{Factory* factoryA = new FactoryA();Factory* factoryB = new FactoryB();Product* productA = factoryA->CreateProduct();Product* productB = factoryB->CreateProduct();productA->show();productB->show();if (factoryA != nullptr){delete factoryA;factoryA = nullptr;}if (factoryB != nullptr){delete factoryB;factoryB = nullptr;}if (productA != nullptr){delete productA;productA = nullptr;}if (productB != nullptr){delete productB;productB = nullptr;}return 0;
}

参考:C++设计模式——工厂方法模式 - Ring_1992 - 博客园 (cnblogs.com)

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

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

相关文章

【PHP】PHP实现与硬件串口交互,向硬件设备发送指令数据(下)

目录 一、前言 二、 效果图 三、安装PHP扩展 四、添加模拟串口 五、PHP发送数据给硬件 PHP代码 前端代码 一、前言 上篇文章写到PHP怎么与硬件串口交互之实时接收硬件发送的数据&#xff0c;这里同样是以天平为例&#xff0c;介绍怎么向硬件设备发送数据&#xff0c; 需…

2024IPA第九届明星盛典 全球总决赛圆满落幕!

2024年1月30日-2月1日&#xff0c;魔都上海迎来了龙年第一场“少儿形体行业美育春晚”&#xff01;由IPA模特委员会主办的第九届少儿模特明星盛典全球总决赛圆满收官&#xff01;近2000名少儿模特选手从五湖四海而来&#xff0c;决战寒假这场高水准&#xff0c;高人气&#xff…

经典语义分割(一)利用pytorch复现全卷积神经网络FCN

经典语义分割(一)利用pytorch复现全卷积神经网络FCN 这里选择B站up主[霹雳吧啦Wz]根据pytorch官方torchvision模块中实现的FCN源码。 Github连接&#xff1a;FCN源码 1 FCN模型搭建 1.1 FCN网络图 pytorch官方实现的FCN网络图&#xff0c;如下所示。 1.2 backbone FCN原…

Facebook广告资料库是什么?一文教你找到竞争对手的广告!

在今天这个数字营销的时代&#xff0c;了解和分析竞争对手在Facebook广告上的动向成为了跨境电商和社媒营销人员的必备技能。有了Facebook广告资料库&#xff0c;你不仅能够查看竞争对手的广告活动&#xff0c;还能深入了解他们的广告策略。那么&#xff0c;如何利用这个Facebo…

Matlab 机器人工具箱 例程:运动学+动力学+路径规划+可视化

文章目录 1 创建机器人2 机器人显示3 机器人示教4 机器人路径规划&#xff1a;给定关节角路径5 机器人路径规划&#xff1a;给定末端位姿&#xff0c;求关节角路径6 工作空间可视化参考链接 1 创建机器人 clc;clear;close all; deg pi/180;L1 Revolute(d, 0, a, 0, alpha, 0,…

托管服务器常见的问题有哪些(常见托管问题解决)

​  对于我们来说&#xff0c;选择一个合适的服务器托管提供商只是建立和管理自己所属网站的第一步。相对来说&#xff0c;真正的挑战在于解决管理网站运行时可能出现的各种问题。就像有时&#xff0c;有些常见的服务器托管问题是不可避免的&#xff0c;但通过主动监控、定期…

我国数据管理机构陆续完善,推动数据安全产业提速

据国家公务员局消息&#xff0c;2024年2月25日&#xff0c;国家数据局综合司、政策规划司、数据资源司进行了拟招录工作人员的面试。国家数据局下设的五个司局名称目前已经正式确定为&#xff1a;综合司、政策规划司、数据资源司、数字经济司、数字科技和基础设施建设司。 自国…

【AI Agent系列】【MetaGPT多智能体学习】4. 基于MetaGPT的Team组件开发你的第一个智能体团队

本系列文章跟随《MetaGPT多智能体课程》&#xff08;https://github.com/datawhalechina/hugging-multi-agent&#xff09;&#xff0c;深入理解并实践多智能体系统的开发。 本文为该课程的第四章&#xff08;多智能体开发&#xff09;的第二篇笔记。主要是对MetaGPT中Team组件…

docker安装使用基础

一、镜像安装 我的docker安装在centos7虚拟机上&#xff08;关于虚拟机网络设置此前已有总结VMware 搭建centos虚拟机网络设置_vmware centos 网络配置-CSDN博客&#xff09;&#xff0c;现在默认操作系统和网络已就位。 1、安装工具包 # 安装操作一般都需要管理员权限&…

基于Keil的RTE(run time environment)配置GD32开发环境,移植FreeRTOS

前言&#xff1a; 10多年前就用STM32了&#xff0c;最近从STM32转到GD32&#xff0c;感觉国产的芯片发展是真的快&#xff0c;不但更便宜&#xff0c;还更快更好用了&#xff08;是在是受不了STM32 I2C BUSY的那个BUG&#xff09;。 先说下&#xff0c;实际上STM32的程序可以…

2024 CHINASHOP丨悠络客AI应用亮点抢鲜看,还有价值百元门票免费送哦!

3月13日-15日&#xff0c;备受国内外关注的第二十四届中国零售业博览会&#xff08;2024 CHINASHOP&#xff09;将在上海国家会展中心正式开展&#xff01;悠络客作为深耕智慧门店15年的公有云人工智能企业&#xff0c;也将带着全新AI产品和智慧门店解决方案亮相展会&#xff0…

【C\C++】C\C++内存管理

目录 一、C\C内存分配 1、栈区 2、堆区 3、全局(静态)区 4、常量区 5、代码段 二、C语言内存管理方式 1、malloc 2、calloc 3、relloc 4、free 三、C内存管理方式 一、C\C内存分配 C\C内存分区示意图如下&#xff1a; 1、栈区 栈区由编译器自动分配释放&#xff0…