简单工厂、工厂方法与抽象工厂之间的区别

news2024/12/26 3:22:17

简单工厂、工厂方法与抽象工厂之间的区别

    • 1、简单工厂(Simple Factory)
      • 1.1 定义
      • 1.2 特点
      • 1.3 示例场景
    • 2、工厂方法(Factory Method)
      • 2.1 定义
      • 2.2 特点
      • 2.3 示例场景
    • 3、抽象工厂(Abstract Factory)
      • 3.1 定义
      • 3.2 特点
      • 3.3 示例场景


💖The Begin💖点点关注,收藏不迷路💖

设计模式是解决常见问题的最佳实践。工厂模式系列(简单工厂、工厂方法、抽象工厂)作为创建型设计模式,它们在对象的创建和管理上扮演着重要角色。接下来,我们将深入探讨这三种工厂模式之间的区别。

1、简单工厂(Simple Factory)

1.1 定义

简单工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。通过定义一个工厂类,根据传入的参数或类型信息来创建不同类的实例。

1.2 特点

  • 集中创建逻辑:将所有实例的创建逻辑封装在一个工厂类中。
  • 易于使用:客户端只需传入参数即可获取所需的对象,无需知道对象的创建细节。
  • 扩展性差:当需要增加新的产品时,需要修改工厂类的代码,违反了开闭原则。

1.3 示例场景

  • 简单的日志记录器,根据配置的不同创建不同类型的日志记录器实例。
  • 根据不同的用户类型创建不同的用户对象。

2、工厂方法(Factory Method)

2.1 定义

工厂方法模式是对简单工厂模式的进一步抽象和改进。它定义一个用于创建对象的接口,但让子类决定要实例化的类是哪一个。

2.2 特点

  • 符合开闭原则:当需要增加新的产品时,只需增加新的具体产品类和相应的工厂子类,无需修改原有的工厂接口或工厂类。
  • 解耦:将对象的创建与使用分离,降低了系统的耦合度。
  • 灵活性:可以根据不同的需要创建不同的产品实例。

2.3 示例场景

  • 多种数据库连接对象的创建,每种数据库对应一个工厂子类。
  • 游戏中的不同角色创建,每种角色对应一个工厂子类。

3、抽象工厂(Abstract Factory)

3.1 定义

抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

3.2 特点

  • 产品族:抽象工厂模式关注的是产品族(即一组具有相同主题或目的的产品),而不是单个产品。
  • 增加产品族容易:当需要增加新的产品族时,只需增加新的抽象工厂和相应的具体工厂类,原有代码无需修改。
  • 增加新产品难:如果需要在一个产品族中增加新的产品,则需要在所有的具体工厂类中增加相应的创建逻辑,可能会违反开闭原则。

3.3 示例场景

  • 跨平台的UI组件创建,如Windows和Mac平台的按钮、文本框等。
  • 游戏中的不同场景创建,每个场景包含多个相关的游戏对象(如敌人、道具等)。

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

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

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

相关文章

uni-app学习HBuilderX学习-微信开发者工具配置

HBuilderX官网:简介 - HBuilderX 文档 (dcloud.net.cn)https://hx.dcloud.net.cn/ uni-app官网: uni-app官网 (dcloud.net.cn)https://uniapp.dcloud.net.cn/quickstart-hx.htmlHBuilder下载安装:打开官网 uni-app项目的微信开发者工具配置…

【python】Python高阶函数--map函数的详细语法分析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

第二篇 Vue项目的搭建

1、脚手架安装 npm init vuelatest:官方提供的Vue项目脚手架工具,帮助我们搭建一个最简单的vue应用。 2、vs打开项目文件夹 打开脚手架生成的文件夹到vs并安装volar插件,以便vs能够支持vue格式代码 3、启动项目 npm run dev:vu…

Leetcode1929. 数组串联

问题描述&#xff1a; 给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans &#xff0c;数组下标 从 0 开始计数 &#xff0c;对于所有 0 < i < n 的 i &#xff0c;满足下述所有要求&#xff1a; ans[i] nums[i]ans[i n] nums[i] 具体而言…

目标检测算法与应用算法 DS集成 接口相关_v0.1

目录 文章目录 目录0. 目标GPS信息、速度、加速度、航向角信息的输出1. 目标检测算法接口1.1 模型相关1.2 检测结果相关 2. 应用算法接口2.1 bool cross_line; //跨线&#xff08;变道压线检测&#xff09;2.2 bool break_in; //闯入&#xff08;目标闯入&#xff09;2.3 bool …

GPT LangChain experimental agent - allow dangerous code

题意&#xff1a;GPT LangChain 实验性代理 - 允许危险代码 问题背景&#xff1a; Im creating a chatbot in VS Code where it will receive csv file through a prompt on Streamlit interface. However from the moment that file is loaded, it is showing a message with…

HTML+echarts.js实现的炫酷金色风格可视化组件

模板下载地址&#xff1a; 炫酷金色风格可视化组件 (bootstrapmb.com)https://www.bootstrapmb.com/item/14888 一款炫酷金色风格可视化组件&#xff0c;统计图表使用Echarts.js&#xff0c;整体风格采用金黄色看起来很大气&#xff0c;设计是通用型的&#xff0c;可以用作任…

格式工厂转换视频分辨率

1、下载和安装 http://www.pcfreetime.com/formatfactory/CN/index.html 2、打开视频 3、设置分辨率等参数 也可以选择保持原分辨率 4、执行导出 5、打开输出所在位置

【ARM】MDK-解决CMSIS_DAP.DLL missing报错

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 记录解决CMSIS_DAP.DLL missing的报错情况&#xff0c;对应相关报错信息&#xff0c;供后续客户参考&#xff0c;快速解决客户问题。 2、 问题场景 客户进行硬件调试时&#xff0c;发现Target设置内有CMSIS_DAP.DL…

[开源]语雀+Vercel:打造免费个人博客网站

大家好,我是白露。 今天我想和大家分享我的今年的第一个开源项目 —— 基于语雀+Nextjs+Vercel实现免费的博客系统。 简单来说,你在语雀写博客,然后直接一键同步到个人网站上,网站自动部署! 而且,整个过程几乎不需要额外的成本,也不用充值语雀超级会员,hh。这个项目…

电流测量分流电阻

电流测量分流电阻 测量电流的设备称为安培计。大多数现代安培计测量已知电阻的精密电阻上的电压降。电流的计算使用欧姆定律&#xff1a;我五R 大多数电流表都内置电阻器来测量电流。但是&#xff0c;当电流对于电流表来说太高时&#xff0c;需要不同的设置。解决方案是将电流…

【C++】C++旅游管理系统(源码+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

ARM架构(二)—— arm v7/v8/v9寄存器介绍

1、ARM v7寄存器 1.1 通用寄存器 V7 V8开始 FIQ个IRQ优先级一样&#xff0c; 通用寄存器&#xff1a;31个 1.2 程序状态寄存器 CPSR是程序状态毒存器&#xff0c;保存条件标志位&#xff0c;中断禁止位&#xff0c;当前处理器模式等控制和状态位。每种异常模式下还存在SPSR&…

前端JS特效第46集:js-实现响应式节庆活动砸金蛋效果

js-实现响应式节庆活动砸金蛋效果&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下(全部代码在文章末尾)&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>响应式节庆活动砸金蛋…

万界星空科技MES系统生产计划管理的功能

MES系统&#xff08;Manufacturing Execution System&#xff0c;制造执行系统&#xff09;的生产计划管理功能是其核心功能之一&#xff0c;旨在将企业的生产计划转化为实际的生产操作&#xff0c;并通过实时监控和调整来确保生产活动的顺利进行。以下是MES系统生产计划管理功…

阿里布达插画:成都亚恒丰创教育科技有限公司

阿里布达插画&#xff1a;梦幻与现实交织的绮丽画卷 在浩瀚的艺术长河中&#xff0c;总有一些作品以其独特的魅力&#xff0c;跨越时空的界限&#xff0c;触动着每一个观者的心灵。阿里布达插画&#xff0c;便是这样一股不可忽视的艺术清流&#xff0c;它以细腻的情感描绘、奇…

气膜篮球馆:理想的运动空间选择—轻空间

快速建造 气膜篮球馆的建造速度快&#xff0c;通常只需几周即可完成。这与传统建筑需要数月甚至数年的时间相比&#xff0c;显著缩短了工期。快速建造不仅能迅速投入使用&#xff0c;还减少了因工期延长而产生的额外费用。 成本效益 气膜结构相比传统建筑成本更低&#xff0c;特…

继电器模块的使用与代码示例

目录 前言 继电器简介 模块接线 工作原理 驱动代码 relay.h relay.c main.c 参考手册 继电器&#xff08;英文名称&#xff1a;relay&#xff09;是一种电控制器件&#xff0c;是当输入量&#xff08;激励量&#xff09;的变化达到规定要求时&#xff0c;在电气输出电…

Day16_集合与迭代器

Day16-集合 Day16 集合与迭代器1.1 集合的概念 集合继承图1.2 Collection接口1、添加元素2、删除元素3、查询与获取元素不过当我们实际使用都是使用的他的子类Arraylist&#xff01;&#xff01;&#xff01; 1.3 API演示1、演示添加2、演示删除3、演示查询与获取元素 2 Iterat…