设计模式-创建型模式-工厂方法模式

一、什么是工厂方法模式

        工厂模式又称工厂方法模式,是一种创建型设计模式,其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型。工厂方法模式是目标是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。这种设计模式也是 Java 开发中最常见的一种模式,它的主要意图是定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

二、场景模拟

        假设我们要给一个成本计算系统设计一套各种材料的成本计算。其中材料有钢板、油漆、运输等成本,每个成本需要计算单条记录成本,本周成本和月度成本。

三、业务实现

        首先我们定义一下成本接口 ICosts,里面有三个方法,分别是SingleCosts(),WeekCosts()和

MonthCosts()。

3.1、定义成本接口

成本接口 ICosts,模拟三个方法,计算单个成本、本月成本和本周成本;

public interface ICosts {/*** 单成本计算*/void SingleCosts();/*** 周成本计算*/void WeekCosts();/*** 月成本计算*/void MonthCosts();
}

3.2、定义具体实现类 

首先是钢板类材料实现类

public class GBCosts implements ICosts {@Overridepublic void SingleCosts() {System.out.println("计算钢板成本");}@Overridepublic void WeekCosts() {System.out.println("计算本周钢板成本");}@Overridepublic void MonthCosts() {System.out.println("计算本月钢板成本");}
}

然后是油漆

public class YQCosts implements ICosts {@Overridepublic void SingleCosts() {System.out.println("计算油漆成本");}@Overridepublic void WeekCosts() {System.out.println("计算本周油漆成本");}@Overridepublic void MonthCosts() {System.out.println("计算本月油漆成本");}
}

最后是运输

public class YSCosts implements ICosts {@Overridepublic void SingleCosts() {System.out.println("计算运输成本");}@Overridepublic void WeekCosts() {System.out.println("计算本周运输成本");}@Overridepublic void MonthCosts() {System.out.println("计算本月运输成本");}
}

3.3、定义成本计算工厂

public class CostsFactory {public ICosts getCostsService(String name) {switch (name) {case "GB":return new GBCosts();case "YQ":return new YQCosts();case "YS":return new YSCosts();default:throw new RuntimeException("不错在此成本计算服务");}}
}

3.4、测试

public static void main(String[] args) {CostsFactory costsFactory = new CostsFactory();ICosts GBCosts = costsFactory.getCostsService("GB");GBCosts.SingleCosts();GBCosts.WeekCosts();GBCosts.MonthCosts();ICosts YQCosts = costsFactory.getCostsService("YQ");YQCosts.SingleCosts();YQCosts.WeekCosts();YQCosts.MonthCosts();}

可以看到既满足了业务的需求,也满足了自己对代码的追求。这样的代码不必有大量的if-else存在,而且扩展性更强,代码结构更加清晰。

四、总结

        工厂方法模式(Factory Method Pattern)是一种创建型设计模式,用于创建对象的过程被推迟到子类中进行,这样可以使一个类的实例化延迟到其子类。这种模式通过定义一个创建对象的接口,但是由子类决定要实例化的类是哪一个。

        当使用时只需要调用抽象工厂接口来创建即可,不需要了解具体的实现和创建逻辑。例如在数据库操作中,针对不同的数据库类型(Mysql、Oracle等)可以使用不同的数据库连接对象,工厂方法可以根据需要创建不同类型的连接对象。

        通过工厂方法,我们可以在客户端代码中对产品的具体类型进行抽象,并通过子类来创建相应的对象,从而提供了更大的灵活性和可扩展性。

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

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

相关文章

双流网络论文精读笔记

精读视频:双流网络论文逐段精读【论文精读】_哔哩哔哩_bilibili Two-Stream Convolutional Networks for Action Recognition in Videos 传统的神经网络难以学习到物体的运动信息,双流网络则通过光流将物体运动信息抽取出来再传递给神经网络 给模型提供…

未来制造业的新引擎:工业机器人控制解决方案

制造业正经历着一场革命性的变革 在这个变革的浪潮中,工业机器人成为推动制造业高效生产的关键力量。然而,要发挥机器人的最大潜力,一个强大而智能的控制系统是必不可少的。在这个领域,新一代的工业机器人控制解决方案正崭露头角&…

Gradle常用命令与参数依赖管理和版本决议

一、Gradle 常用命令与参数 本课程全程基于 Gradle8.0 环境 1、Gradle 命令 介绍 gradle 命令之前我们先来了解下 gradle 命令怎么在项目中执行。 1.1、gradlew gradlew 即 Gradle Wrapper,在学习小组的第一课时已经介绍过了这里就不多赘述。提一下执行命令&am…

python解决登录图形验证码

摘要:测试过程中经常遇到图片验证码,以下主要是调用百度OCR图片识别获取验证码,实现登录 1、百度云申请创建应用

Autoware.universe部署06:使用DBC文件进行UDP的CAN通信代码编写

目录标题 一、安装DBC文件编辑工具VectorCANdb二、编写DBC文件2.1 CAN通信协议2.2 编写DBC文件2.2.1 根据CAN协议设置signals2.2.2 设置报文2.2.3 建立节点 三、根据DBC文件编写ROS2驱动程序四、实际通信调试 根据CAN协议编写DBC文件,通过DBC文件编写ROS2包进行UDP通…

【前端】前端监控⊆埋点

文章目录 前端监控分为三个方面前端监控流程异常监控常见的错误捕获方法主要是 try / catch 、window.onerror 和window.addEventListener 等。Promise 错误Vue 错误React 错误 性能监控用户行为监控常见的埋点方案来源 前端监控分为三个方面 异常监控(监控前端页面…

2014年6月18日 Go生态洞察:Go 1.3 版本发布

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

linux之 服务器ping百度能通,ping其他网址不通

表症问题 linux上ping域名解析出来的ip地址不正确 linux服务器ping百度能通,ping其他网址不通 linux上ping域名解析出来的ip地址不正确 ping 百度可以,说明dns解析是没问题的 但是,ping 其他网址不通,说明是 请求的其他网址的问…

Android studio 迁移之后打开没反应

把Android studio由d盘迁移到c盘,点击没反应; 需要把C:\Users\xxxx\AppData\Roaming\Google\AndroidStudio2022.3 目录下的studio64.exe.vmoptions 修改为C:,删除该文件会导致无法安装app。 里面配置了一个

改进YOLOv5 | C3模块改动篇 | 轻量化设计 |骨干引入动态卷积|CondConv

🗝️YOLOv5实战宝典--星级指南:从入门到精通,您不可错过的技巧   -- 聚焦于YOLO的 最新版本, 对颈部网络改进、添加局部注意力、增加检测头部,实测涨点 💡 深入浅出YOLOv5:我的专业笔记与技术总结   -- YOLOv5轻松上手, 适用技术小白,文章代码齐全,仅需 …

什么是应急演练脚本?其设计原则是什么?

应急演练脚本是一种系统性、有计划的模拟性文件,旨在测试和评估组织在紧急情况下的应对能力。这种脚本提供了一系列步骤和场景,以确保团队能够高效、协调地应对各种紧急事件。以下将详细探讨应急演练脚本的定义、设计原则以及实施过程。 一、应急演练脚本…

智慧社区建设管理方案,AI技术让小区更智能、更舒适

一、背景与需求分析 智慧社区是充分应用大数据、云计算、人工智能等信息技术手段,整合社区各类服务资源,打造基于信息化、智能化管理与服务的社区治理新形态。根据《关于深入推进智慧社区建设的意见》,到2025年,基本构建起网格化…