【编码魔法师系列_构建型1.2 】工厂方法模式(Factory Method)

在这里插入图片描述

学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。

文章目录

  • 实例
  • 目的
  • 适用场景
  • 弊端
  • 类图:
  • 框架用到的地方:
  • Coding
  • 测试:
  • 测试结果:

实例

一家SUV造车厂,一家小轿车造车厂,且小轿车会根据“厢”划分不同车型,故作如下设计:

目的

将买车顾客和汽车解耦,工厂类承担构建所有对象的职责,顾客只需要说出车型,让工厂生产出来即可。并且解决某种车会有多种配置的情况,若是使用前面的“简单工厂模式”我们就需要在汇总的工厂类中加入分支语句,随着各类车增加车型会使汇总工厂类变得越来越大。「说白了再创建一个工厂,用来创建工厂类对象」

适用场景

产品有大量的继承体系并且后期会有大量的扩展需求

弊端

每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度。

类图:

在这里插入图片描述

框架用到的地方:

日志记录、数据库访问等

Coding

Car接口:

public interface Car {void creat();
}

SmallCar:

public class SmallCar implements Car {public SmallCar(Integer box) {this.creat(box);}public SmallCar() {this.creat();}@Overridepublic void creat() {System.out.println("造一辆标配小轿车");}public void creat(Integer box) {System.out.println("造一辆" + box + "厢小轿车");}
}

SUV:

public class SUV implements Car{@Overridepublic void creat() {System.out.println("造一辆SUV");}
}

SmallCarFactory:

public class SmallCarFactory {public Car creatCar(Integer box) {if (box != null) {return new SmallCar(box);}return new SmallCar();}
}

SUVCarFactory:

public class SUVCarFactory {public Car creatCar(){return new SUV();}
}

测试:

public class Test {public static void main(String[] args) {SmallCarFactory smallCarFactory = new SmallCarFactory();Car car = smallCarFactory.creatCar(null);System.out.println(car);}
}

测试结果:

造一辆标配小轿车
文章后期会持续优化,如果觉得小名的文章帮助到了您,请关注小名,支持一下小名😄,给小名的文章点赞👍、评论✍、收藏🤞谢谢大家啦~♥♥♥
编码魔法师系列文章,会收录在小名的【设计模式】专栏中,希望大家可以持续关注🎉

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

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

相关文章

设置github的默认分支

设置github的默认分支 更换默认分支默认分支的作用 更换默认分支 之前默认的分支想main, 现在想更换默认的分支 点击main, 可以看到有两个分支: main和gpuVersion, 可以看到这里默认main分支为default 如果想设置gpuVersion作为default,可以点击View all branches, 进入下一个…

测试域: 流量回放-工具篇jvm-sandbox,jvm-sandbox-repeater,gs-rest-service

JVM-Sandbox Jvm-Sandbox-Repeater架构_小小平不平凡的博客-CSDN博客 https://www.cnblogs.com/hong-fithing/p/16222644.html 流量回放框架jvm-sandbox-repeater的实践_做人,最重要的就是开心嘛的博客-CSDN博客 [jvm-sandbox-repeater 学习笔记][入门使用篇] 2…

数据结构 | 树和二叉树

树 树是n(n>0)个结点的有限集。当n 0时,称为空树。在任意一棵非空树中应满足: 有且仅有一个特定的称为根的结点。当n>1时,其余节点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm&#…

uni-app 之 去掉顶部导航

uni-app 之 去掉顶部导航 uniapp怎么样去掉顶部导航 uniapp去掉顶部导航的方法: 1、去掉所有导航栏; 2、单一页面去掉顶部导航栏。 image.png uniapp去掉顶部导航的方法: 1、去掉所有导航栏 "globalStyle": {"navigationBar…

Perceptual Compression与Semantic Compression的含义

这是我在读LDMS的学到的 Perceptual Compression 保留人类能够感知的重要信息,例如纹理,局部边缘等 Semantic Compression 保留数据的实际意义,例如图片包含了人物、建筑,人物之间的关系等

活动预告 | 中国数据库联盟(ACDU)中国行第三站定档成都,邀您探讨数据库前沿技术

数据库技术一直是信息时代中不可或缺的核心组成部分,随着信息量的爆炸式增长和数据的多样化,其重要性愈发凸显。作为中国数据库联盟(ACDU)的品牌活动之一,【ACDU 中国行】在线下汇集数据库领域的行业知名人士&#xff…

uniapp小程序点击按钮直接退出小程序效果demo(整理)

点击按钮直接退出小程序 <navigator target"miniProgram" open-type"exit">退出小程序</navigator>

支撑位和阻力位在Renko和烛台图如何使用?FPmarkets澳福3秒回答

很多投资者都知道&#xff0c;Renko图表和普通日本烛台都会采用相同的交易信号&#xff0c;即支撑位和阻力位。那么支撑位和阻力位在Renko和烛台图如何使用?FPmarkets澳福3秒回答。 这些信号在任何时间框架上都会出现&#xff0c;且在蜡烛图交易中颇受欢迎。对于Renko图表而言…

《DATASET CONDENSATION WITH GRADIENT MATCHING》

本文提出了一种用于数据效率学习的训练集合成技术&#xff0c;称为“数据集凝聚”(Dataset)&#xff0c;它学习将大数据集压缩成一个小的信息合成样本集&#xff0c;用于从头开始训练深度神经网络。我们将这个目标表述为在原始数据和合成数据上训练的深度神经网络权值的梯度之间…

[Linux] 2.Linux开发环境的搭建(Ubuntu)

虚拟机&#xff1a;VMare安装、Ubuntu、VitualBox 真机&#xff1a;公司的研发服务器 Linux虚拟机安装所需文件&#xff1a; 网盘资源&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1WN-tizjHpOgNF0tjbvcZsA?pwd2itd 提取码&#xff1a;2itd 文件解压&#xff…

十四、流式编程(4)

本章概要 终端操作 数组循环集合组合匹配查找信息数字流信息 终端操作 以下操作将会获取流的最终结果。至此我们无法再继续往后传递流。可以说&#xff0c;终端操作&#xff08;Terminal Operations&#xff09;总是我们在流管道中所做的最后一件事。 数组 toArray()&…

火山引擎DataLeap推出两款大模型应用: 对话式检索与开发 打破代码语言屏障

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 自上世50年代&#xff0c;以“计算机”作为代表性象征的信息革命开始&#xff0c;社会对于先进生产力的认知便开始逐步更迭——从信息化&#xff08;通常认为是把企…

Coupang真的好做吗?韩国Coupang入驻流程——站斧浏览器

coupang真的好做吗&#xff1f; Coupang自开放全球注册以来&#xff0c;一直备受跨境电商各平台卖家的关注&#xff0c;那么作为一颗跨境电商的新星&#xff0c;真的值得做吗&#xff1f; 不到一年的关注度遭到如此众多的跨境卖家追捧的平台&#xff0c;火是有他的原因的&…

【办公类-16-06】20230901大班运动场地分配表-斜线排列、5天循环、不跳节日,手动修改节日”(python 排班表系列)

背景需求&#xff1a; 大班组长发来一个“运动排班”的需求表&#xff1a;“就是和去年一样的每个班的运动排班&#xff0c;就因为今年大班变成7个班&#xff0c;删掉一个场地&#xff0c;就要重新做一份&#xff0c;不然我就用去年的那份了&#xff08;8个大班排班&#xff0…

【内网穿透】在Ubuntu搭建Web小游戏网站,并将其发布到公网访问

目录 前言 1. 本地环境服务搭建 2. 局域网测试访问 3. 内网穿透 3.1 ubuntu本地安装cpolar 3.2 创建隧道 3.3 测试公网访问 4. 配置固定二级子域名 4.1 保留一个二级子域名 4.2 配置二级子域名 4.3 测试访问公网固定二级子域名 前言 网&#xff1a;我们通常说的是互…

notepad++配合正则表达式分组模式处理文本转化为sql语句

一、正则分组知识点补充 正则分组和捕获 ()&#xff1a;用于分组和捕获子表达式。 大白话就是()匹配到的数据&#xff0c;通过美元符号加下标可以获取该数据&#xff0c;例如$1、$2, 下标从1开始。 下面的案例就采用该模式处理文本数据 二、使用正则的需求背景 有一份报表…

小米云原生文件存储平台化实践:支撑 AI 训练、大模型、容器平台多项业务

小米作为全球知名的科技巨头公司&#xff0c;已经在数百款产品中广泛应用了 AI 技术&#xff0c;这些产品包括手机、电视、智能音箱、儿童手表和翻译机等。这些 AI 应用主要都是通过小米的深度学习训练平台完成的。 在训练平台的存储方案中&#xff0c;小米曾尝试了多种不同的…

网络安全CTF比赛有哪些事?——《CTF那些事儿》告诉你

目录 前言 一、内容简介 二、读者对象 三、专家推荐 四、全书目录 前言 CTF比赛是快速提升网络安全实战技能的重要途径&#xff0c;已成为各个行业选拔网络安全人才的通用方法。但是&#xff0c;本书作者在从事CTF培训的过程中&#xff0c;发现存在几个突出的问题&#xff1…

ndoe.js、npm相关笔记

1、npm 全局安装 npm config get prefix 获取 npm 全局安装路径如果全局插件不能正常使用&#xff0c;看环境变量是否已经配置。没有配置则把全局安装路径配置到环境变量的path中

MS933NA适用于 1MP/60fps 摄像头、37.5MHz100MHz、10 位/12 位的串化器

MS933NA 是 10 位 /12 位串化器&#xff0c;支持 37.5MHz  100MHz 时钟&#xff0c; MS933NA 广泛应用于车载摄像、医疗设备、管道探测等领域。 主要特点 ◼ 支持输入 37.5MHz 到 100MHz 的图像时钟 ◼ 单个差分对互连 ◼ 可编程数据有效负载 10 位 /12 …