Java设计模式深度解析:掌握工厂模式,优化对象创建与管理

工厂模式是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建对象的方法。在Java中,工厂模式可以通过接口和实现类来实现。比如我们建一个外形工厂,工厂提供对外的获取外形方法,传入不同的参数即可获取不同的外形。如图所示:
在这里插入图片描述

以下是工厂模式的详细说明:

  1. 定义一个工厂接口,该接口包含一个用于创建对象的抽象方法。例如,可以创建一个名为Shape的接口,其中包含一个名为draw()的抽象方法:
public interface Shape {void draw();
}
  1. 创建实现工厂接口的具体类。这些类将负责创建具体的产品对象。例如,可以创建三个实现Shape接口的具体类:Circle、Rectangle和Square:
public class Circle implements Shape {@Overridepublic void draw() {System.out.println("画一个圆形");}
}public class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("画一个矩形");}
}public class Square implements Shape {@Overridepublic void draw() {System.out.println("画一个正方形");}
}
  1. 创建一个工厂类,该类负责根据传入的参数创建相应的产品对象。例如,可以创建一个名为ShapeFactory的工厂类,其中包含一个名为getShape()的方法,该方法根据传入的参数创建相应的Shape对象:
public class ShapeFactory {public Shape getShape(String shapeType) {if (shapeType == null) {return null;}if (shapeType.equalsIgnoreCase("CIRCLE")) {return new Circle();} else if (shapeType.equalsIgnoreCase("RECTANGLE")) {return new Rectangle();} else if (shapeType.equalsIgnoreCase("SQUARE")) {return new Square();}return null;}
}
  1. 在客户端代码中使用工厂类来创建并使用产品对象。例如,可以在main()方法中使用ShapeFactory来创建并使用Shape对象:
public class FactoryPatternDemo {public static void main(String[] args) {ShapeFactory shapeFactory = new ShapeFactory();Shape circle = shapeFactory.getShape("CIRCLE");circle.draw();Shape rectangle = shapeFactory.getShape("RECTANGLE");rectangle.draw();Shape square = shapeFactory.getShape("SQUARE");square.draw();}
}

应用场景

工厂模式适用于多种场景,尤其当需要创建一组相关或不相关的对象时,或者在需要将对象的创建和使用分离的情况下。以下是一些具体的应用场景:

  1. 配置管理:在软件配置管理中,可以使用工厂模式来创建不同类型的配置对象,例如开发环境、测试环境和生产环境的配置。
  2. 游戏开发:在游戏开发中,可以根据不同的游戏关卡或玩家的选择来创建不同的敌人或道具对象。
  3. 数据库连接:在需要建立数据库连接时,可以根据不同的配置或需求创建不同类型的数据库连接对象,如MySQL、Oracle或SQLite。
  4. 工具类库:在创建工具类库时,可以使用工厂模式来生成各种工具对象,这样用户只需传入参数而无需了解具体的创建逻辑。
  5. 框架扩展:在开发框架或库时,工厂模式可以用于创建框架内部的组件或扩展,使得框架更加灵活和可扩展。
  6. 对象转换:在需要将一种对象转换成另一种对象时,可以使用工厂模式来简化转换过程,例如在不同数据格式之间转换。
  7. 依赖注入:在依赖注入框架中,工厂模式可以用来创建对象的依赖关系,从而实现解耦和易于测试的目的。

工厂模式的优点

  1. 明确职责:工厂模式通过将对象的创建逻辑集中在工厂类中,使得客户端代码从直接创建对象的职责中解放出来,从而让各个类的职责更加明确。
  2. 提高灵活性和可维护性:由于对象的创建细节被封装在工厂类中,当需要增加新的对象类型时,只需扩展具体的产品类和相应的工厂类即可,无需修改现有的客户端代码,这大大提高了系统的灵活性和可维护性。
  3. 隐藏创建细节:工厂模式通过抽象的工厂接口或抽象类来隐藏具体产品的创建细节,客户端代码仅需要知道所需产品的接口或抽象类,而不必关心具体的实现,这样可以减少客户端代码与具体类的依赖。
  4. 降低耦合度:工厂模式通过提供一个创建对象的接口,将对象的创建和使用分离,降低了系统各部分之间的耦合度,有助于提高系统的稳定性和扩展性。

工厂模式的缺点

  1. 违背开闭原则:简单工厂模式在添加新产品时需要修改工厂类的代码,这违反了软件设计中的开闭原则,即软件实体应当对扩展开放,对修改封闭。
  2. 工厂类逻辑复杂:随着产品种类的增加,工厂类的判断逻辑会变得越来越复杂,这可能导致工厂类难以管理和维护。
  3. 系统扩展困难:由于所有产品的创建逻辑都集中在一个工厂类中,一旦需要增加或删除产品,整个系统都会受到影响,这使得系统的扩展变得困难。

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

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

相关文章

git命令行提交——github

1. 克隆仓库至本地 git clone 右键paste(github仓库地址) cd 仓库路径(进入到仓库内部准备提交文件等操作) 2. 查看main分支 git branch(列出本地仓库中的所有分支) 3. 创建新分支(可省…

Linux 之五:权限管理(文件权限和用户管理)

1. 文件权限 在Linux系统中,文件权限是一个非常基础且重要的安全机制。它决定了用户和用户组对文件或目录的访问控制级别。 每个文件或目录都有一个包含9个字符的权限模式,这些字符分为三组,每组三个字符,分别对应文件所有者的权限…

GIS之深度学习08:安装GPU环境下的pytorch

环境: cuda:12.1.1 cudnn:12.x pytorch:2.2.0 torchvision:0.17.0 Python:3.8 操作系统:win (本文安装一半才发现pytorch与cuda未对应,重新安装了cuda后才开始的&a…

RT-thread学习持续更新中(1)

标准版RTT移植 先不要选择nano版本,选标准版的 include包含头文件 applications 应用层的程序编写放里面 drivers驱动 libraries库 rtthread的内核 LOG_D打印信息 通过修改board.c的SystemClock_Config()更改系统时钟 由于在创建工程向导…

Docker的安装及MySQL的部署(CentOS版)

目录 1 前言 2 Docker安装步骤 2.1 卸载可能存在的旧版Docker 2.2 配置Docker的yum库 2.2.1 安装yum工具 2.2.2 配置Docker的yum源 2.3 安装Docker 2.4 启动和校验 2.5 配置镜像加速(使用阿里云) 2.5.1 进入控制台 2.5.2 进入容器镜像服务 2.5.3 获取指令并粘贴到…

推理判断-聂佳-判读4-定义判断

知识点讲解 考点1 快速识别有效信息 考点2 同构选项排除 题目 考点1 快速识别有效信息 考点2 同构选项排除 总结

免费下载Corel Video Studio 2024-轻松创建令人惊叹的视频!

免费下载Corel Video Studio 2024-轻松创建令人惊叹的视频! Corel Video Studio 2024免费下载Keygen 你厌倦了在视频编辑软件上花大钱吗?别再看了!我们为您提供了完美的解决方案——Corel Video Studio 2024。最棒的部分是什么?…

准备系统运行的先决条件

知识点: 大数据基础环境准备 重 点: SSH免密码连接 安装配置JDK 安装配置Scala 项目开发测试环境为分布式集群环境,在当前项目中使用多台基于CentOS 64bit 的虚拟机来模拟生产环境。在生产环境中建议使用高性能物理主机或云主机搭建集…

添加路障-蓝桥杯-DFS

自己另辟蹊径想的新思路 果然好像还是不太行呀 import java.util.Scanner;public class Main {static int T;//样例组数static int n;//矩阵大小static int[] X {0,1,0,-1};static int[] Y {1,0,-1,0};static int[] X1 {1,0,-1,0};static int[] Y1 {0,-1,0,1};static int …

CSRF攻击解析:原理、防御与应对策略

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

激光在SIC晶圆制造中的应用

碳化硅是一种性能优异的第三代半导体材料,具有光学性能良好、化学惰性大、物理特性优良的特点,包括带隙宽、击穿电压高、热导率高和耐高温性能强等优点,常作为新一代高频、高功率器件的衬底材料,广泛应用在高端制造业领域&#xf…

UE4.27_ParticleSystem(没写完的材料)

UE4.27_ParticleSystem(没写完的材料) 参考实例: UE4[蓝图]下雪效果及雪的材质的实现

基于springboot+vue实现物资仓储物流管理系统项目【项目源码+论文说明】计算机毕业设计

基于springbootvue实现物资仓储物流管理系统演示 摘要 随着我国经济及产业化结构的持续升级,越来越多的企业借助信息化及互联网平台实现了技术的创新以及竞争力的提升,在电子经济的影响下仓储物流业务也获得了更多的关注度,利用系统平台实现…

《2024国家自然科学基金青年基金》 相关申请注意事项解读

一 年龄计算 2004 对应 89 2005 对应 90 2006 对应 91 2007 对应 92 2008 对应 93 2009 对应 94 2010 对应 95 .。。 二 资助比例(2023) 2024年 23.13% 2023年 24% 三 2024年政策变动,只能申请3年的30万,不能像23年一样选择10-20的…

简洁的链式思维(CCoT)提示

原文地址:Concise Chain-of-Thought (CCoT) Prompting 传统的CoT导致了输出令牌使用的增加,而CCoT提示是一种旨在减少LLM响应的冗长性和推理时间的提示工程技术。 2024 年 1 月 24 日 Areas where Chain-Of-Thought-like methodology has been introd…

猫头虎分享已解决Bug || 批处理错误:BatchJobFailure, ProcessingDelay

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

深入理解神经网络

图片怎么被识别的过程 (每层神经网络是数组,会对进来的数据进行加权求和[(weight*数据 然后累加) bias])(激活函数是为了训练weight和bias偏移值,在每个神经网络)(分类器会统计概率分类) 2. 引用链接 https://mp.weixin.qq.com/s?__bizMzIyNjMxOTY0NA&mid2247500124&…

RocketMQ-存储与弹性伸缩

存储与弹性伸缩 一、介绍二、存储架构图1.CommitLog2.ConsumeQueue3.IndexFile 三、消息读写流程1.写入流程1.1 获取Topic元数据1.2 消息投递1.3 消息写入 2.读取流程2.1 获取Topic元数据2.2 消息拉取2.3 消息消费 四、消息持久化1.页缓存2.刷盘2.1 同步刷盘2.2 异步刷盘 五、集…

【python】异常处理

前言 省略各种废话,直接快速整理知识点 try-except 基础 作用 程序不可能永远都是对的,当7除a,a由用户输入时,用户输入0就会报错。try-except就是解决这些问题。 结构 多分支自定义错误类型 上方的exception是一个错误类型…

基于Kronig-Penney能带模型的MATLAB求解与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于Kronig-Penney能带模型的MATLAB求解与仿真.综合利用 MATLAB提供的求解常微分方程、矩阵行列式、代数表达式化简及绘图等函数 ,可使 Kronig-Penney能带模型分析…