(二)趣学设计模式 之 工厂方法模式!

在这里插入图片描述

目录

    • 一、 啥是工厂方法模式?
    • 二、 为什么要用工厂方法模式?
    • 三、 工厂方法模式怎么实现?
    • 四、 工厂方法模式的应用场景
    • 五、 工厂方法模式的优点和缺点
    • 六、 总结

🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!
🌟了解单例模式请看: (一)趣学设计模式 之 单例模式!

这篇文章带你详细认识一下设计模式中的工厂方法模式

一、 啥是工厂方法模式?

想象一下,你开了一家甜品店 🍰,有蛋糕 🎂、饼干 🍪、面包 🍞 三种甜点。如果只有一个厨师,啥都做,那他不得累死?而且万一你想加个新品种,还得让他学新的手艺,太麻烦了!

工厂方法模式就像这样,每种甜点都有自己的专属厨师(工厂),蛋糕厨师只做蛋糕,饼干厨师只做饼干,面包厨师只做面包。这样,每个厨师都专注于自己的领域,而且你想加新品种,只需要招一个新的厨师就行了!

简单来说,工厂方法模式就是:每个产品都有自己的专属工厂,负责创建该产品!

二、 为什么要用工厂方法模式?

  • 职责分离: 每个工厂只负责创建一种产品,职责更清晰。
  • 扩展性好: 添加新的产品类型,只需要添加新的工厂类即可,不需要修改原来的代码,符合开闭原则 👍。
  • 灵活性高: 可以根据需要选择不同的工厂来创建产品。

三、 工厂方法模式怎么实现?

// 1. 定义产品接口
interface Dessert {void show(); // 展示甜点
}// 2. 定义具体的产品类
class Cake implements Dessert {@Overridepublic void show() {System.out.println("我是美味的蛋糕! 🎂");}
}class Cookie implements Dessert {@Overridepublic void show() {System.out.println("我是香甜的饼干! 🍪");}
}class Bread implements Dessert {@Overridepublic void show() {System.out.println("我是松软的面包! 🍞");}
}// 3. 定义工厂接口
interface DessertFactory {Dessert createDessert(); // 创建甜点
}// 4. 定义具体的工厂类
class CakeFactory implements DessertFactory {@Overridepublic Dessert createDessert() {System.out.println("蛋糕工厂正在制作蛋糕! 🍰");return new Cake();}
}class CookieFactory implements DessertFactory {@Overridepublic Dessert createDessert() {System.out.println("饼干工厂正在制作饼干! 🍪");return new Cookie();}
}class BreadFactory implements DessertFactory {@Overridepublic Dessert createDessert() {System.out.println("面包工厂正在制作面包! 🍞");return new Bread();}
}// 5. 客户端使用
public class Client {public static void main(String[] args) {// 创建蛋糕工厂DessertFactory cakeFactory = new CakeFactory();// 生产蛋糕Dessert cake = cakeFactory.createDessert();cake.show(); // 输出:我是美味的蛋糕! 🎂// 创建饼干工厂DessertFactory cookieFactory = new CookieFactory();// 生产饼干Dessert cookie = cookieFactory.createDessert();cookie.show(); // 输出:我是香甜的饼干! 🍪// 创建面包工厂DessertFactory breadFactory = new BreadFactory();// 生产面包Dessert bread = breadFactory.createDessert();bread.show(); // 输出:我是松软的面包! 🍞}
}

解释:

  • Dessert:产品接口,定义了甜点的通用行为(展示自己)。
  • CakeCookieBread:具体的产品类,实现了 Dessert 接口,分别代表蛋糕、饼干和面包。
  • DessertFactory:工厂接口,定义了创建甜点的通用方法。
  • CakeFactoryCookieFactoryBreadFactory:具体的工厂类,实现了 DessertFactory 接口,分别负责创建蛋糕、饼干和面包。
  • createDessert():创建甜点的方法。

输出结果:

蛋糕工厂正在制作蛋糕! 🍰
我是美味的蛋糕! 🎂
饼干工厂正在制作饼干! 🍪
我是香甜的饼干! 🍪
面包工厂正在制作面包! 🍞
我是松软的面包! 🍞

四、 工厂方法模式的应用场景

  • 日志框架: 可以使用工厂方法模式创建不同类型的日志记录器(文件日志、数据库日志等)。
  • 支付系统: 可以使用工厂方法模式创建不同类型的支付方式(支付宝、微信支付等)。
  • 游戏开发: 可以使用工厂方法模式创建不同类型的游戏角色(战士、法师、弓箭手等)。

五、 工厂方法模式的优点和缺点

优点:

  • 职责分离: 每个工厂只负责创建一种产品,职责更清晰。
  • 扩展性好: 添加新的产品类型,只需要添加新的工厂类即可,不需要修改原来的代码,符合开闭原则 👍。
  • 灵活性高: 可以根据需要选择不同的工厂来创建产品。

缺点:

  • 类增多: 需要为每个产品都创建一个工厂类,导致类的数量增多。
  • 复杂度增加: 代码结构相对复杂,理解起来稍微困难。

六、 总结

  • 工厂方法模式为每个产品都定义一个专属的工厂。
  • 每个工厂只负责创建一种产品,职责更清晰。
  • 添加新的产品类型,只需要添加新的工厂类即可,符合开闭原则。
  • 工厂方法模式适用于产品类型较多,且需要灵活扩展的场景。

希望这篇文章能让你彻底理解工厂方法模式! 👍
看完请看:(三)趣学设计模式 之 抽象工厂模式!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详细介绍嵌入式硬件设计

嵌入式硬件设计详解 一、嵌入式硬件设计核心概念 嵌入式硬件设计是针对特定应用场景,将处理器、存储器、外设接口等电子元件集成到电路板上,实现特定功能的系统开发过程。其核心目标是 高可靠性、低功耗、小体积 和 成本优化。 二、设计流程与关键步骤 …

goredis常见基础命令

基本操作 //删除键 exists,err: rdb.Exists(ctx,"key").Result() if err!nil{panic(err) } if exists>0{err rdb.Del(ctx,"key").Err()if err!nil{panic(err)} }string类型 //设置一个键值对 //0表示没有过期时间 err:rdb.Set(ctx,"key1",…

微服务环境搭建架构介绍(附超清图解源代码)

微服务介绍 系统架构演变 随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。 从互联网早起到现在,系统架构大体经历了下面几个过程: 单体应用架构--->垂直应用架构--->分布 式架构--->SOA架构…

Java-01-源码篇-04集合-05-ConcurrentHashMap(1)

1.1 加载因子 加载因子(Load Factor)是用来决定什么时候需要扩容的一个参数。具体来说,加载因子 当前元素数量 / 桶的数量,当某个桶的元素个数超过了 桶的数量 加载因子 时,就会触发扩容。 我们都知道 ConcurrentHas…

一文详解U盘启动Legacy/UEFI方式以及GPT/MBR关系

对于装系统的老手而说一直想研究一下装系统的原理,以及面对一些问题时的解决思路,故对以前的方法进行原理上的解释,主要想理解其底层原理。 引导模式 MBR分区可以同时支持UEFI和Legacy引导,我们可以看一下微pe制作的启动盘&#…

【多线程-第三天-NSOperation的练习-tableView异步下载网络图片-下载操作缓存池 Objective-C语言】

一、下载操作缓存池 1.下面我们来看操作缓存池,我们先演示一下问题,看看为什么要加这么一个操作缓存池,什么是操作缓存池,不用管呢,我们先来看啊,首先有什么问题, 看这个问题之前,我这儿写一个touch,点击屏幕的时候调用, 额,不能点击屏幕啊,因为现在屏幕点不着,我…

Windows 中的启动项如何打开?管理电脑启动程序的三种方法

在日常使用电脑时,我们经常会发现一些应用程序在开机时自动启动,这不仅会拖慢系统的启动速度,还可能占用不必要的系统资源。幸运的是,通过几个简单的步骤,你可以轻松管理这些开机自启的应用程序。接下来,我…

具备智能广告拦截、个性化定制的便捷网页浏览器

软件介绍 今天要给大家介绍一款源自俄罗斯的国民级软件,它来自俄罗斯最大互联网公司之一的 Yandex。这家公司不仅有搜索引擎业务,还打造出诸多热门软件,其中就有我们要讲的这款网页浏览器。它由 Yandex 公司依托 Chromium 开源项目开发&…

LangChain-基础(prompts、序列化、流式输出、自定义输出)

LangChain-基础 我们现在使用的大模型训练数据都是基于历史数据训练出来的,它们都无法处理一些实时性的问题或者一些在训练时为训练到的一些问题,解决这个问题有2种解决方案 基于现有的大模型上进行微调,使得它能适应这些问题(本…

119. 杨辉三角 II

给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1]示例 2: 输入: rowIndex 0 输出: [1]示例 3: 输入: rowIndex 1 输出: [1,1]提示…

Unity Android SDK 升级、安装 build-tools、platform-tools

Unity Android SDK 升级、安装 build-tools、platform-tools 通过 Unity Hub 安装的 Android SDK 需要下载 特定版本的 build-tools、platform-tools 如何操作? 以 Unity 2022.3.26f1 为例,打开安装目录,找到如下目录 2022.3.26f1\Editor\…

网络空间安全(3)web渗透测试学习框架

前言 Web渗透测试是一种安全评估方法,旨在通过模拟黑客攻击来检测Web应用程序中的安全漏洞。 一、学习基础 在学习Web渗透测试之前,需要掌握一些基础知识,包括计算机网络、Web开发技术(如HTML、JavaScript、PHP等)、数…

人工智能之自动驾驶技术体系

自动驾驶技术体系 自动驾驶技术是人工智能在交通领域的重要应用,旨在通过计算机视觉、传感器融合、路径规划等技术实现车辆的自主驾驶。自动驾驶不仅能够提高交通效率,还能减少交通事故和环境污染。本文将深入探讨自动驾驶的技术体系,包括感…

25会计研究生复试面试问题汇总 会计专业知识问题很全! 会计复试全流程攻略 会计考研复试真题汇总

宝子们,会计考研复试快到了,是不是有点慌?别怕!今天学姐给你们支招,手把手教你搞定复试面试,直接冲上岸!快来看看怎么准备吧,时间紧直接背第三部分的面试题! 目录 一、复…

本地化部署 DeepSeek:从零到一的完整指南

本地化部署 DeepSeek:从零到一的完整指南 个人主页:顾漂亮 文章专栏:AI学习 目录 引言什么是 DeepSeek?为什么选择本地化部署?DeepSeek 本地化部署的前期准备 硬件需求软件需求环境配置 DeepSeek 本地化部署步骤 步骤…

【深度学习】Unet的基础介绍

U-Net是一种用于图像分割的深度学习模型,特别适合医学影像和其他需要分割细节的任务。如图: Unet论文原文 为什么叫U-Net? U-Net的结构像字母“U”,所以得名。它的结构由两个主要部分组成: 下采样(编码…

【学习笔记】Cadence电子设计全流程(二)原理图库的创建与设计(8-15)

【学习笔记】Cadence电子设计全流程(二)原理图库的创建与设计(下) 2.8 Cadence 软件自带元件库2.9 原理图元器件关联PCB2.10 原理图元器件库的移植2.11 已有原理图输出元器件库2.12 原理图设计中调用元器件库2.13 原理图元器件库关…

DeepSeek从入门到精通

1_DeepSeek从入门到精通 (1).pdf官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘123云盘为您提供1_DeepSeek从入门到精通 (1).pdf最新版正式版官方版绿色版下载,1_DeepSeek从入门到精通 (1).pdf安卓版手机版apk免费下载安装到手机,支持电脑端一键快捷安装https://www.123…

Comfyui Windows Desktop桌面版便携版安装教程

前段时间Comfyui 的便携包安装写了一篇,最近comfyui发布了新的桌面版本0.4.5,我也试着安装了一下,感觉使用体验比便携包要舒适一点点。 下面是安装指南。 安装地址 官方给了下载包,分为N卡和Mac。地址:Notion – Th…

DeepSeek 提示词:定义、作用、分类与设计原则

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…