当前位置: 首页 > news >正文

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.lryc.cn/news/310688.html

相关文章:

  • 水豚鼠标助手 强大的鼠标美化工具
  • ArrayList集合源码分析
  • 循环队列与循环双端队列
  • https【详解】与http的区别,对称加密,非对称加密,证书,解析流程图
  • (C语言)qsort函数模拟实现
  • WordPress建站入门教程:如何在本地电脑搭建WordPress网站?
  • Vue3教程
  • Linux系统Docker部署RStudio Server
  • 【C++】每周一题——2024.3.3(手滑再再写一篇)
  • TabLayout与ToolBar、ViewPager的使用
  • 链表基础知识详解(非常详细简单易懂)
  • SAP PP学习笔记05 - BOM配置(Customize)1 - 修正参数
  • 前端从普通登录到单点登录(SSO)
  • 考研总计划(基础篇)
  • 力扣周赛387
  • 部署PhotoMaker通过堆叠 ID 嵌入自定义逼真的人物照片
  • 挑战杯 基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类
  • 关于RSA公私钥加密报错Data must not be longer than 117 bytes问题解决办法
  • 【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0
  • Android 开发环境搭建的步骤
  • 六、继承(一)
  • 数字化转型导师鹏:政府数字化转型政务服务类案例研究
  • 解决ODOO12 恢复数据库提示内存不够报错
  • 关于数据提交上传服务端的数据类型以及项目打包上线的流程
  • 儿童悬吊训练系统:改善脑性麻痹儿童平衡感与运动能力的有效途径
  • ElasticSearch之文档的存储
  • 在Redhat 7 Linux上安装llama.cpp [ 错误stdatomic.h: No such file or directory]
  • linux 常用 命令行HTTP客户端
  • 深入理解@Param注解:用于参数映射的利器
  • OCP Secure boot必要特性