恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

工厂模式 - 人造恶魔果实工厂2

  • 首页
  • 资讯中心
  • /
  • 工厂模式 - 人造恶魔果实工厂2

相关资讯

视频修复技术全解析:从画质诊断到超分重建的实操流程 2026/8/31 20:19:31
迅雷校招iOS笔试复盘:从OC底层到Runtime的备考指南 2026/8/31 20:14:31
如何快速上手ANE:5分钟在Apple Silicon上运行NPU训练 2026/8/31 20:14:31

最新资讯

基于AST解析与subagent的Shell命令安全审核实践
京东校招iOS笔试题复盘:高频考点、内存管理与手写编程题全解析
用代码文档驱动编码智能体:从上下文工程到可验证执行
多模型聚合平台新势力:基元律动(TokenRhythm)上线,首充福利与模型实测
网易CV算法岗校招笔试全拆解:考点、编程题与备考策略
判断哪些工作值得自动化?一个评估型AI Skill的设计与实现

今日推荐

MCU无DAC如何用定时器+DMA 2D输出高保真任意波形
Cortex-M3 Flash下载失败?从编程错误标志到供电瞬态排查
STM32 TouchGFX屏幕切换Transition优化:原理、配置与排障实战

本周热门

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析
数字电路时序基石:深入理解建立时间与保持时间
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

工厂模式 - 人造恶魔果实工厂2

发布时间:2026/8/31 20:19:31
工厂模式 - 人造恶魔果实工厂2 1. 简单工厂模式的弊端在上一节简单工厂模式中创建了一个工厂类用于生产需要的对象但是这种方式有一个弊端它违反了设计模式中的开放-封闭原则先来看相关的代码// 恶魔果实工厂类 enum class Type:char{SHEEP, LION, BAT}; class SmileFactory { public: SmileFactory() {} ~SmileFactory() {} AbstractSmile* createSmile(Type type) { AbstractSmile* ptr nullptr; switch (type) { case Type::SHEEP: ptr new SheepSmile; break; case Type::LION: ptr new LionSmile; break; case Type::BAT: ptr new BatSmile; break; default: break; } return ptr; } };在上面的工厂函数中需要生成三种人造恶魔果实现在如果想要生成更多那么就需要在工厂函数的switch语句中添加更多的case很明显这违背了封闭原则也就意味着需要基于开放原则来解决这个问题。使用工厂模式可以很完美的解决上述的问题简单工厂模式是只有一个工厂类而工厂模式是有很多的工厂类一个基类包含一个虚工厂函数用于实现多态。多个子类重写父类的工厂函数。每个子工厂类负责生产一种恶魔果实这相当于再次解耦将工厂类的职责再次拆分、细化如果要生产新品种的恶魔果实那么只需要添加对应的工厂类无需修改原有的代码。2. 工厂模式我们先修改一下简单工厂模式中工厂类相关的代码// 恶魔果实工厂类 class AbstractFactory { public: virtual AbstractSmile* createSmile() 0; virtual ~AbstractFactory() {} }; class SheepFactory : public AbstractFactory { public: AbstractSmile* createSmile() override { return new SheepSmile; } ~SheepFactory() { cout 释放 SheepFactory 类相关的内存资源 endl; } }; class LionFactory : public AbstractFactory { public: AbstractSmile* createSmile() override { return new LionSmile; } ~LionFactory() { cout 释放 LionFactory 类相关的内存资源 endl; } }; class BatFactory : public AbstractFactory { public: AbstractSmile* createSmile() override { return new BatSmile; } ~BatFactory() { cout 释放 BatFactory 类相关的内存资源 endl; } };通过示例代码可以看到每个工厂类其实都不复杂在每个子工厂类中也只是重写了父类的工厂方法而已每个子工厂类生产一种恶魔果实但是工厂函数的返回值确是恶魔果实类的基类类型相当于是使用父类指针指向了子类对象此处也是用到了多态。通过这样的处理工厂函数也就不再需要参数了。根据简单工厂模式的代码和上面的修改就可以把工厂模式的UML类图画出来了完整的代码应该是这样的:#include iostream using namespace std; class AbstractSmile { public: virtual void transform() 0; virtual void ability() 0; virtual ~AbstractSmile() {} }; // 人造恶魔果实· 绵羊形态 class SheepSmile : public AbstractSmile { public: void transform() override { cout 变成人兽 -- 山羊人形态... endl; } void ability() override { cout 将手臂变成绵羊角的招式 -- 巨羊角 endl; } }; // 人造恶魔果实· 狮子形态 class LionSmile : public AbstractSmile { public: void transform() override { cout 变成人兽 -- 狮子人形态... endl; } void ability() override { cout 火遁· 豪火球之术... endl; } }; class BatSmile : public AbstractSmile { public: void transform() override { cout 变成人兽 -- 蝙蝠人形态... endl; } void ability() override { cout 声纳引箭之万剑归宗... endl; } }; // 恶魔果实工厂类 class AbstractFactory { public: virtual AbstractSmile* createSmile() 0; virtual ~AbstractFactory() {} }; class SheepFactory : public AbstractFactory { public: AbstractSmile* createSmile() override { return new SheepSmile; } ~SheepFactory() { cout 释放 SheepFactory 类相关的内存资源 endl; } }; class LionFactory : public AbstractFactory { public: // 工厂函数 AbstractSmile* createSmile() override { return new LionSmile; } ~LionFactory() { cout 释放 LionFactory 类相关的内存资源 endl; } }; class BatFactory : public AbstractFactory { public: // 工厂函数 AbstractSmile* createSmile() override { return new BatSmile; } ~BatFactory() { cout 释放 BatFactory 类相关的内存资源 endl; } }; int main() { AbstractFactory* factory new BatFactory; AbstractSmile* obj factory-createSmile(); obj-transform(); obj-ability(); return 0; }在main()函数中的这句代码是实例化了一个生成蝙蝠恶魔果实的工厂对象:AbstractFactory* factory new BatFactory;在真实的项目场景中要生成什么类型的恶魔果实其实是通过客户端的操作界面控制的它对应的可能是一个按钮或者是一个选择列表用户做出了选择程序就可以根据该需求去创建对应的工厂对象最终将选择的恶魔果实生产出来。在上面的例子中不论是恶魔果实的基类还是工厂类的基类它们的虚函数可以是纯虚函数也可以是非纯虚函数。这样的基类在设计模式中就可以称之为抽象类此处的抽象类和C中对抽象类的定义有一点出入。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号