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

【13】c++设计模式——>简单工厂模式

工厂模式的定义

c++中的工厂模式是一种创建型设计模式,它提供一种创建对象的接口,但具体创建的对象类型可以在运行时决定,这样可以将对象的创建与使用代码分离,提高代码的灵活性和可维护性。
在c++中实现工厂模式,通常会定义一个工厂类,该类负责创建对象。工厂类通常具有一个公共的创建接口,可以根据传入的参数或者条件来返回不同类型的对象,这样客户端代码只需要与工厂类进行交互,而无需了解具体对象的创建细节。

工厂模式的主要优点

解耦:工厂模式可以帮助我们将对象的创建和使用过程解耦,是的代码更加灵活和可维护。

工厂模式创建使用步骤

1.创建一个新的类,可以将这个类称之为工厂类,对于简单工厂模式来说,需要的工厂类只有一个。
2.在这个工厂类中添加一个公共的成员函数,通过这个函数来创建我们需要的对象,关于这个函数一般将其称之为工厂函数
3.使用时,首先创建一个工厂对象,然后通过这个对象调用工厂函数,这样就可以产出一个指定类型的实例对象了。

代码实例

#include <iostream>
using namespace std;//创建父类
class AbstructSmile
{
public:virtual void transform() = 0;virtual void ability() = 0;virtual ~AbstructSmile() {} //提供虚析构函数,为了能够释放子类对象
};class sheepSmile : public AbstructSmile
{
public:void transform() override{cout << "山羊恶魔果实" << endl;}void ability() override{cout << "山羊能力" << endl;}
};class lionSmile : public AbstructSmile
{
public:void transform() override{cout << "狮子恶魔果实" << endl;}void ability() override{cout << "狮子能力" << endl;}
};class batSmile : public AbstructSmile
{
public:void transform() override{cout << "蝙蝠恶魔果实" << endl;}void ability() override{cout << "蝙蝠能力" << endl;}
};
enum class Type :char {SHEEP,LION,BAT};
//创建工厂类
class smileFactory
{
public:smileFactory() {}~smileFactory() {}void* creatsmile(Type type){void* ptr = nullptr;switch (type){case Type::SHEEP:ptr = new sheepSmile;break;case Type::BAT:ptr = new batSmile;break;case Type::LION:ptr = new lionSmile;break;default:break;}return ptr;}
};int main()
{smileFactory* ptr = new smileFactory;AbstructSmile* sheepObj = (AbstructSmile*)(ptr->creatsmile(Type::SHEEP));sheepObj->transform();sheepObj->ability();AbstructSmile* lionObj = (AbstructSmile*)(ptr->creatsmile(Type::LION));lionObj->transform();lionObj->ability();AbstructSmile* batObj = (AbstructSmile*)(ptr->creatsmile(Type::BAT));batObj->transform();batObj->ability();return 0;
}

c++ 强类型枚举

enum class Type :char {SHEEP,LION,BAT};

代码片段是C++中的一个枚举类的定义。这是一个强类型的枚举,因为它指定了底层类型为char。这意味着这个枚举中的每个元素都会占用一个字节的内存,并且可以用char类型的值来表示。因此SHEEP,LION,BAT都各自只占一个字节。

http://www.lryc.cn/news/186818.html

相关文章:

  • 系统架构设计:2 论软件设计方法及其应用
  • 基于Winform的UDP通信
  • 掌握 BERT:自然语言处理 (NLP) 从初级到高级的综合指南(1)
  • Linux Ftrace介绍
  • Go语言进阶------>init()函数
  • 云计算:常用微服务框架
  • jmeter添加断言(详细图解)
  • few shot object detection via feature reweight笔记
  • 工会排队模式:电商新营销模式吸引消费者,提升销售!
  • 定档通知2024中国(北京)国际红外技术及设备展览会
  • 自助建站系统,一建建站系统api版,自动建站
  • 算法框架-LLM-1-Prompt设计(一)
  • 一个rar压缩包如何分成三个?
  • 批量获取拼多多商品详情数据,拼多多商品详情API接口
  • Redis Cluster Gossip Protocol: 目录
  • HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Span
  • 这些负载均衡都解决哪些问题?服务、网关、NGINX
  • Lambda表达式在C++中的定义
  • sheng的学习笔记-【中文】【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验
  • 前端代码格式化规范总结
  • Windows10打开应用总是会弹出提示窗口的解决方法
  • 易点易动固定资产管理系统: 帮助您应对2023年年终固定资产大盘点
  • OpenGLES:绘制一个混色旋转的3D立方体
  • Maven(4)-利用intellij idea创建maven 多模块项目
  • 8年测试老鸟,性能测试-数据库连接池问题定位/分析,一篇打通...
  • 【Sentinel】Sentinel原码分析
  • 计算机竞赛 题目:基于深度学习的人脸表情识别 - 卷积神经网络 竞赛项目 代码
  • 基于aarch64分析kernel源码 五:idle进程(0号进程)
  • 【Linux】 vi / vim 使用
  • Leetcode hot 100之双指针(快慢指针、滑动窗口)