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

三个工厂模式(通俗易懂)

工厂模式

功能∶将对象的实例化交给工厂去做,你只需要告诉工厂你需要什么对象,我给你造出来就行了。目的:让使用者只需要关注自己需要的,而不需要关注这个东西是怎么创建的,能用就行。让实例创建和实例使用解耦

1. 简单工厂模式

该模式对对象创建管理方式最为简单,因为其仅仅简单的对不同类对象的创建进行了一层薄薄的封装。该模式通过向工厂传递类型来指定要创建的对象。

 2.工厂方法模式(Factory Method)

和简单工厂模式中工厂负责生产所有产品相比,工厂方法模式将生成具体产品的任务分发给具体的产品工厂,说白了就是给工厂的是产品,工厂管理产品,使用产品。不管产品还是工厂都是使用抽象类。

3. 抽象工厂模式(Abstract Factory)

上面两种模式不管工厂怎么拆分抽象,都只是针对一类产品(a),如果要生成另一种产品(b),应该怎么表示呢?

最简单的方式是把2中介绍的工厂方法模式完全复制一份,不过这次生产的是b产品。但同时也就意味着我们要完全复制和修改a生产管理的所有代码,显然这是一个笨办法,并不利于扩展和维护。

抽象工厂模式通过在AbstarctFactory中增加创建产品的接口,并在具体子工厂中实现新加产品的创建,当然前提是子工厂支持生产该产品。否则继承的这个接口可以什么也不干。

说白了就是,抽象工厂模式的产品是多个工厂,工厂里面可以创建多的具体产品。

总结:

上面介绍的三种工厂模式有各自的应用场景,实际应用时能解决问题满足需求即可,可灵活变通,无所谓高级与低级。

此外无论哪种模式,由于可能封装了大量对象和工厂创建,新加产品需要修改已定义好的工厂相关的类,因此对于产品和工厂的扩展不太友好,利弊需要权衡一下。 

简单工厂:唯一工厂类,一个产品抽象类,工厂类的创建方法依据入参判断并创建具体产品对象。一对一的关系 -----对产品进行抽象
工厂方法:多个工厂类,一个产品抽象类,利用多态创建不同的产品对象,避免了大量的if-else判断。多对一的关系 ----对工厂进行抽象
抽象工厂:多个工厂类,多个产品抽象类,产品子类分组,同一个工厂实现类创建同组中的不同产品,减少了工厂子类的数量。多对多的关系

 参考:

C++创建型模式-工厂模式_herryone123的博客-CSDN博客_c++工厂模式

相关文章:

  • 本地环境下启动openFaas创建的Java的云函数
  • Java 第三阶段增强分析需求,代码实现能力【正则表达式】
  • Java基础【理解版】
  • 《Mycat分布式数据库架构》之搭建详解
  • Opencv项目实战:02 角度探测器
  • OSPF —— 多区域部署 + ABR + ASBR + 路由重分发
  • 猿创征文|JVM之图解垃圾收集器2-Shenandoah和ZGC
  • springboot+安卓app电子阅览室系统毕业设计源码016514
  • 第04章 第04章 队列
  • 智慧工业+数字孪生,打造智慧设备运维最优解
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • 【java_wxid项目】【第七章】【Spring Cloud Alibaba Seata集成】
  • Devops全链路学习——docker docker-compose jenkins
  • 程序生成随机数的方法
  • 《nginx》一、nginx核心指令
  • 【Leetcode】101. 对称二叉树
  • 【译】JS基础算法脚本:字符串结尾
  • Consul Config 使用Git做版本控制的实现
  • CSS 提示工具(Tooltip)
  • Laravel Mix运行时关于es2015报错解决方案
  • python 装饰器(一)
  • scrapy学习之路4(itemloder的使用)
  • Travix是如何部署应用程序到Kubernetes上的
  • Web Storage相关
  • windows下mongoDB的环境配置
  • 从0到1:PostCSS 插件开发最佳实践
  • 记一次删除Git记录中的大文件的过程
  • 力扣(LeetCode)22
  • 全栈开发——Linux
  • 突破自己的技术思维
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 译有关态射的一切
  • 用Visual Studio开发以太坊智能合约
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • #Lua:Lua调用C++生成的DLL库
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (52)只出现一次的数字III
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (十)T检验-第一部分
  • (四)模仿学习-完成后台管理页面查询
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Standard 的管理策略
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .NET中两种OCR方式对比
  • .skip() 和 .only() 的使用
  • @RequestBody与@ModelAttribute
  • @软考考生,这份软考高分攻略你须知道
  • [ C++ ] 继承
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)