【设计模式】第5节:创建型模式之“简单工厂、工厂方法和抽象工厂模式”

news2024/9/22 13:32:23

一、简单工厂模式

请添加图片描述

ProductFactory是创建商品的工厂,商品Product可以实现Product接口中的一些功能。

当需要根据入参的不同生成多种不同的产品时,可以将生成不同产品的逻辑剥离出来,使用产品工厂创建不同的产品。

二、工厂方法

请添加图片描述

ConcreteFactory是具体工厂,用来创建具体产品ConcreteProduct,ProductFactory是创建工厂的工厂,用来创建具体工厂。具体商品ConcreteProduct可以实现Product接口中的一些功能。

三、抽象工厂

请添加图片描述

当需要生成多种产品,每种产品又有多种分类时,就可以采用抽象工厂了。产品工厂ProductFactory用来重建各种大类的产品Product1和Product2,具体工厂ConcreteFactory用来创建各自产品中更细小的分类。

四、适用场景

之所以将某个代码块剥离出来,独立为函数或者类,原因是这个代码块的逻辑过于复杂,剥离之后能让代码更加清晰,更加可读、可维护。

当创建逻辑比较复杂的时候,就考虑使用工厂模式,封装对象的创建过程,将对象的创建和使用相分离。下面是两种创建逻辑比较复杂的场景:

  • 代码中存在if-else分支判断,动态地根据不同的类型创建不同的对象。针对这种情况,我们就考虑使用工厂模式,将这一大坨if-else创建对象的代码抽离出来,放到工厂类中。
  • 尽管我们不需要根据不同的类型创建不同的对象,但是,单个对象本身的创建过程比较复杂,比如要组合其他类对象,做各种初始化操作。在这种情况下,也可以考虑使用工厂模式,将对象的创建过程封装到工厂类中。

对于第一种情况,当每个对象的创建逻辑都比较简单的时候,更推荐使用简单工厂模式,将多个对象的创建逻辑放到一个工厂类中。当每个对象的创建逻辑都比较复杂的时候,为了避免设计一个过于庞大的简单工厂类,推荐使用工厂方法模式,将创建逻辑拆分得更细,每个对象的创建逻辑独立到各自的工厂类中。同理,对于第二种情况,因为单个对象本身的创建逻辑就比较复杂,所以,建议使用工厂方法模式。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

知识点滴 - Email地址不区分大小写

电子邮件地址本身对字符大小写不敏感。这意味着实际的电子邮件地址,如 "exampleemail.com",并不区分字母的大小写。无论你输入的是大写字母还是小写字母,它仍然会到达同一个电子邮件账户。例如,如果您的电子邮件地址是 …

信创生态丨九州未来与超聚变完成兼容性互认证

近日,九州未来与超聚变积极开展了兼容性适配工作,并完成产品兼容性互认证。双方兼容性测试基于Intel64、鲲鹏架构完成,测试结果显示:九州未来Animbus IaaS V8可基于超聚变FusionOS 23服务器操作系统安全稳定运行,产品相…

并发编程-线程池ForkJoinPool工作原理分析

由一道算法题引发的思考 算法题: 如何充分利用多核CPU的性能,快速 对一个2千万大小的数组进行排序? 分解 求解 合并 这道算法题可以拆解来看: 1)首先这是一道排序的算法题,而且是需要使用高效的排序算法…

[量化投资-学习笔记003]Python+TDengine从零开始搭建量化分析平台-Grafana画K线图

在前面两个笔记: PythonTDengine从零开始搭建量化分析平台-数据存储 PythonTDengine从零开始搭建量化分析平台-MA均线的多种实现方式 中有提到使用 Grafana 画图,不过画的都是均线。除了均线,Grafana 非常人性的提供离 K线图模块。 配置简单…

深度学习 anaconda 安装问题

配置anaconda 在官网下载匹配版本的anaconda(官网下载可能时间比较长),可以选择清华镜像。 安装过程默认即可,或者根据情况进行修改。 旧版本是可以在安装的时候勾选添加路径到环境变量中的,但是我安装的是2023.9月…

代码随想录算法训练营第三十三天丨 贪心算法part04

860.柠檬水找零 思路 这道题目刚一看,可能会有点懵,这要怎么找零才能保证完成全部账单的找零呢? 但仔细一琢磨就会发现,可供我们做判断的空间非常少! 只需要维护三种金额的数量,5,10和20。 …

计算机中了mallox勒索病毒怎么办,勒索病毒解密,数据恢复

最近一段时间,云天数据恢复中心陆续收到很多企业的求助,企业的计算机服务器遭到了mallox勒索病毒攻击,导致企业的数据库无法正常使用,严重影响了企业的正常生产生活,为此,云天数据恢复中心的工程师通过对此…

【深度学习】使用Pytorch实现的用于时间序列预测的各种深度学习模型类

深度学习模型类 简介按滑动时间窗口切割数据集模型类CNNGRULSTMMLPRNNTCNTransformer 简介 本文所定义模型类的输入数据的形状shape统一为 [batch_size, time_step,n_features],batch_size为批次大小,time_step为时间步长,n_feat…

Promise及相关知识细学

学习关键语句: Promise promise学习 promise.all promise.race promise.resolve 1. 写在前面 promise 是前端绕不开的东西 , 所以我们一定要好好学习 , 写这篇文章的目的是加深对 promise 的学习和使用程度 2. 开始 2.1 准备 首先创建一个文件夹 , 里面新建一个 index.htm…

Navicat 16 支持 Redis Cluster 集群模式 | 新功能 √

Redis Cluster 适用于需要处理大量数据和高并发访问,并且需要保证高可用性和可扩展性的场景。它在国内许多行业中都得到了广泛的应用。为了满足广大专业用户的需求,Navicat 16 再次升级,新增 Redis Cluster 功能,为Redis 用户带来…

FreeRTOS 计数型信号量 详解

目录 什么是计数型信号量? 计数型信号量相关 API 函数 1. 创建计数型信号量 2. 释放二值信号量 3. 获取二值信号量 计数型信号量实操 什么是计数型信号量? 计数型信号量相当于队列长度大于1 的队列,因此计数型信号量能够容纳多个资源&a…

探索JavaScript ES6+新特性

JavaScript是一门十分流行的编程语言,它不断发展演变以适应现代Web开发需求。ES6(也称为ECMAScript 2015)是JavaScript的第六个版本,引入了许多令人兴奋的新特性和语法糖。本文将介绍一些ES6中最有趣和实用的特性。 箭头函数 箭…

【人脸检测 FPS 1000+】ubuntu下libfacedetection tensorrt部署

TensorRT系列之 Windows10下yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov7 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov6 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov5 tensorrt模型加速…

解决问题:Expected one result (or null) to be returned by selectOne(),but found: 2]

在做一次数据迁移后,系统登录失败,日志报错: 原因:在数据迁移账号时,用户账号有两个相同的账号,所以导致登录失败。

成功项目经理总结的20个项目管理经验

大家好,我是老原。 有人说:项目管理是变理想为现实,化抽象为具体的一门科学和艺术。 这是对项目管理的一种精辟总结。项目管理专业的方法和知识能教会我们如何快捷、科学、艺术地做事。 因为它除了交付项目,更能管理人生。 毕…

代码随想录 | Day56

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 今日学习目标一、算法题1.最长公共子序列2.不相交的线3.最大子数组和 今日心得学习及参考书籍 今日学习目标 最长公共子序列(1143) 不相交的…

数据结构与算法—栈

目录 一、栈的概念及结构 二、栈的实现 1、声明栈结构体 2、初始化 3、 销毁 4、 入栈(压栈) 5、出栈(弹栈) 6、栈的大小 OJ练习 完整版: Stack.h声明 Stack.c函数 test.c参考测试用例 一、栈的概念及结构…

CLIP系列:CLIP:沟通文本和图像的桥梁

CLIP沟通文本和图像的桥梁。 SOTA的视觉任务模型需要固定的监督数据对,比如-大象,-兔子。这种方式在特定数据集上能够拥有很好的性能,但是在其他未知类别上的性能就会急剧下降。这种监督形式限制了模型的通用性,因为需要额外的数据…

linux配置静态路由

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言硬件&操作系统一、静态路由是什么?二、开始配置1.netplan2.NetworkManager1.CLI2.Desktop 三、开始测试总结 前言 最近有一个需求,…

C++数据结构X篇_23_快速排序(最快、不稳定的排序)

文章参考十大经典排序算法-快速排序算法详解进行整理补充。快速排序是最快的排序方法。 排序思路:分治法-挖坑填数:大问题分解为各个小问题,对小问题求解,使得大问题得以解决 文章目录 1. 什么是快速排序1.1 概念1.2 算法原理1.3 …