【java学习—九】工厂方法FactoryMethod(6)

文章目录

  • 1. 概念
  • 2. 实际的应用


1. 概念

    FactoryMethod 模式是设计模式中应用最为广泛的模式,在面向对象的编程中,对象的创建工作非常简单,对象的创建时机却很重要。 FactoryMethod 解决的就是这个问题,它通过面向对象的手法,将所要创建的具体对象的创建工作延迟到了子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。

听不懂是吧?下面直接举例说明:

2. 实际的应用

在这里插入图片描述
注:图中原作者出现笔误,BMW错拼成了BWM
上图中①是BMW的产品接口,②是产品工厂的接口。

代码实现:
(1)开发人员A的工作
接口BMW.java:

package day09;
/*** 宝马车的产品接口* @author 14532**/
public interface BMW {//产品的信息介绍//车的发动方式void showInfo();
}/*** 构建具体的车的类* @author 14532**/
class BMW3 implements BMW{@Overridepublic void showInfo() {System.out.println("这个是宝马3系车");}
}class BMW5 implements BMW{@Overridepublic void showInfo() {System.out.println("这个是宝马5系车");	}
}class BMW7 implements BMW{@Overridepublic void showInfo() {System.out.println("这个是宝马7系车");		}
}

接口BMWFactory.java:

package day09;
/*** 汽车生产工厂接口* @author 14532**/
public interface BMWFactory {BMW productBMW();
}/*** 实现具体的车型的生产工厂* @author 14532**/
class BMW3Factory implements BMWFactory{@Overridepublic BMW productBMW() {System.out.println("生产宝马3系车");return new BMW3();}
}class BMW5Factory implements BMWFactory{@Overridepublic BMW productBMW() {System.out.println("生产宝马5系车");return new BMW5();}
}class BMW7Factory implements BMWFactory{@Overridepublic BMW productBMW() {System.out.println("生产宝马7系车");return new BMW7();}
}

(2)开发人员B的工作:
Test.java:

package day09;public class Test2 {public static void main(String[] args) {//这是开发人员B的工作BMW b3 = new BMW3Factory().productBMW();b3.showInfo();BMW b5 = new BMW5Factory().productBMW();b5.showInfo();BMW b7 = new BMW7Factory().productBMW();b7.showInfo();}}

运行结果:
在这里插入图片描述

如果现在需要对宝马3系的车进行改造,改成宝马3i,该如何实现:
BMW.java中class BMW3 implements BMW{改成class BMW3i implements BMW{
BMWFactory.java中return new BMW3();改成return new BMW3i();
为了区别改造的,在类BMW3Factory中添加一段输出System.out.println("改造3系车,定名为BMW3i型号");
更改后的代码:

(1)开发人员A的工作产生了变化:
接口BMW.java:

package day09;
/*** 宝马车的产品接口* @author 14532**/
public interface BMW {//产品的信息介绍//车的发动方式void showInfo();
}/*** 构建具体的车的类* @author 14532**/
class BMW3i implements BMW{//更改为BMW3i@Overridepublic void showInfo() {System.out.println("这个是宝马3系车");}
}class BMW5 implements BMW{@Overridepublic void showInfo() {System.out.println("这个是宝马5系车");}
}class BMW7 implements BMW{@Overridepublic void showInfo() {System.out.println("这个是宝马7系车");}
}

接口BMWFactory.java:

package day09;
/*** 汽车生产工厂接口* @author 14532**/
public interface BMWFactory {BMW productBMW();
}/*** 实现具体的车型的生产工厂* @author 14532**/
class BMW3Factory implements BMWFactory{//在BMW3Factory中改造BMW3为BMW3i@Overridepublic BMW productBMW() {System.out.println("生产宝马3系车");System.out.println("改造3系车,定名为BMW3i型号");return new BMW3i();//返回BMW3i}}class BMW5Factory implements BMWFactory{@Overridepublic BMW productBMW() {System.out.println("生产宝马5系车");return new BMW5();}}class BMW7Factory implements BMWFactory{@Overridepublic BMW productBMW() {System.out.println("生产宝马7系车");return new BMW7();}}

(2)开发人员B的工作没有变化:
Test.java:

package day09;public class Test2 {public static void main(String[] args) {//这是开发人员B的工作BMW b3 = new BMW3Factory().productBMW();b3.showInfo();BMW b5 = new BMW5Factory().productBMW();b5.showInfo();BMW b7 = new BMW7Factory().productBMW();b7.showInfo();}}

输出结果:
在这里插入图片描述

通过工厂把new对象给隔离,通过产品的接口可以接收不同实际产品的实现类。实现的类名的改变不影响其他合作开发人员的编程。

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

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

相关文章

BUUCTF zip伪加密 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 下载附件,得到一个zip压缩包。 密文: 解题思路: 1、刚开始尝试解压,看到了flag.txt文件,但需要解压密码。结合题目,确认这是zip伪加密&#…

Makefile 基础教程:从零开始学习

在软件开发过程中,Makefile是一个非常重要的工具,它可以帮助我们自动构建程序,管理程序依赖关系,提高开发效率。本篇博客将从基础开始,介绍Makefile的相关知识,帮助大家快速掌握Makefile的使用方法 Makefil…

Corel Products Keygen-X-FORCE 2023(Corel会声会影2023注册机)

Corel All Products Universal Keygens通用注册机是一款非常实用的激活工具,专门用于激活Corel全系列产品。尤其是被广泛使用的CorelDRAW作图软件和Corel VideoStudio会声会影视频编辑处理软件。小编也是一直关注由X-Force团队制作的注册机,目前已更新至…

kubectl资源管理命令-陈述式

目录 一、陈述式对象管理 1、基本概念 2、基础命令使用 3、基本信息查看(kubectl get) 4、增删等操作 5、登录pod中的容器 6、扩容缩容pod控制器的pod 7、删除副本控制器 二、创建项目实例 1、创建 kubectl create命令 2、发布 kubectl …

MySQL-DQL【数据查询语言】(图码结合)

作者:chlorine 专栏:数据库_chlorine5的博客-CSDN博客 MySQL——DDL:DDL ——数据定义语言 MySQL——DML:DML——数据操作语言 目录 一.DQL的定义 二.DQL—语法 三.DQL—基础查询(SELECT.. FROM) 👉查询多个字段 👉设置别名 …

力扣:141. 环形链表(Python3)

题目: 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的…

【软考系统架构设计师】2023年系统架构师冲刺模拟习题之《软件工程》

在软考中软件工程模块主要包含以下考点: 文章目录 软件过程模型🌟🌟🌟🌟逆向工程🌟基于构件的软件工程🌟🌟软件开发与软件设计与维护净室软件工程软件模型软件需求 软件过程模型&am…

Linux MMC子系统 - 2.eMMC 5.1总线协议浅析

By: Ailson Jack Date: 2023.10.27 个人博客:http://www.only2fire.com/ 本文在我博客的地址是:http://www.only2fire.com/archives/161.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。…

科技联众,互利共赢 | 卡驰科技(深圳)有限公司CEO张倍铭博士到访拓世科技集团,共探跨境电商,海外拓展无限可能

在创新的浪潮中,人工智能以其强大的能量持续推动着各行各业的进步,拓世科技集团作为人工智能领域的引领者,通过不断合作和交流,与众多领域的佼佼者共同探讨数字时代的无限可能。卡驰科技(深圳)有限公司作为…

适用于 Mac 或 Windows 的 4 种最佳 JPEG/PNG图片 恢复软件

您的计算机或外部存储驱动器上很可能有大量 JPEG /PNG图片照片,但不知何故,您意识到一些重要的 JPEG /PNG图片文件丢失或被删除,它们对您来说意义重大,您想要找回它们. 4 种最佳 JPEG/PNG图片 恢复软件 要成功执行 JPEG /PNG图片…

【Java笔试强训】Day6(45840-不要二、23292-字符串转成整数)

45840-不要二 链接:45840-不要二 题目: 二货小易有一个W*H的网格盒子,网格的行编号为0~ H-1,网格的列编号为0~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。 对于两个格子坐标(x1,y1),(…

Cross-modal Variational Alignment of Latent Spaces

方法 潜空间LS 辅助信息 作者未公布代码

Git窗口打开vim后如何退出编辑(IDEA/Goland等编辑器)

最近在学习git高级操作过程中,遇到了一下问题: 我在学习Git合并多个commit为一个的时候,需要输入一个命令 git rebase -i HEAD~2 这说明已经是编辑模式了。当我写好后,我还按照原来在linux上的按下ESC键,但是只是光…

知识链接,人工智能可以帮助人类验证世界知识吗?#verify_wikipedia

这是一篇来自Samaya AI的文章,主要介绍了其 CTO 在 Meta AIs FAIR labs 工作发表在 nature 上的一篇论文成果,用于验证和改进维基百科上的引用来源。我做了一些精选和整理,分享给大家: 研究背景 几千年来,人类一直在创…

中国技术的对外输出:Telegram也开始搞小程序应用了

Telegram 宣布为其开发者提供了一项“能够在其中运行迷你应用”的新功能( 迷你应用即 Mini App,下文中以“小程序”代替)。 在 Telegram 的博客中,开发人员介绍可以使用 JavaScript 构建自己的迷你应用 在一篇博客文章中&#xf…

【linux】麒麟v10安装Redis主从集群(ARM架构)

安装redis单示例的请看:麒麟v10安装Redis(ARM架构) 安装环境 ​Hostname​IP addressmaster192.168.0.1slave1192.168.0.2slave2192.168.0.3 下载安装包 (三台都操作) wget https://repo.huaweicloud.com/kunpeng/…

69 划分字母区间

划分字母区间 题解1 贪心1(方法略笨,性能很差)题解2 贪心2(参考标答) 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。 注意,划分结果需要满足&am…

“从部署到优化,打造高效会议管理系统“

目录 引言一、部署单机项目 - 会议OA1.1 硬件和软件环境准备1.2 检查项目1.3 系统部署1.后端部署 二、部署前后端分离项目 - SPA项目后端部署2.前端部署 总结 引言 在现代化办公环境中,会议是组织沟通、决策和合作的重要方式之一。为了提高会议的效率和质量&#x…

针对element-plus,跳转jump(快速翻页)

待补充 const goToPage () > {const inputElement document.querySelector(.el-pagination .el-input__inner);console.log(inputElement, inputElement); } 打印之后可以看到分页跳转的数字输入框,是有进行处理的,max"102",是我自己的…

【每日一题】掷骰子等于目标和的方法数

文章目录 Tag题目来源题目解读解题思路方法一:动态规划 写在最后 Tag 【动态规划】【数组】 题目来源 1155. 掷骰子等于目标和的方法数 题目解读 你手里有 n 个一样的骰子,每个骰子都有 k 个面,分别标号 1 到 n。给定三个整数 n&#xff0…