手写Java设计模式之工厂模式,附源码解读

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。

工厂模式属于创建型模式,它在创建对象时提供了一种封装机制,将实际创建对象的代码与使用代码分离。

以汽车生产为例,我们在生产汽车的时候,找到汽车加工厂,我们只需要给对方品牌信息,然后对方就可以生产出不同品牌的汽车,而不需要关注加工过程。

具体代码如下:

首先创建汽车的生产接口:

public interface Car {void draw();
}

其次,分别让不同品牌实现汽车生产接口,后续如果需要增加新的品牌,仅需增加实现类即可,代码如下:

public class XiaoMi implements Car {@Overridepublic void draw() {System.out.println("生产小米汽车");}
}
public class Tesla implements Car {@Overridepublic void draw() {System.out.println("生产特斯拉");}
}
public class HuaWei implements Car {@Overridepublic void draw() {System.out.println("生产问界汽车");}
}

增加一个汽车工厂,按照不同品牌生产汽车:

public class CarFactory {public Car getCar(String CarType){if(CarType == null){return null;}if(CarType.equalsIgnoreCase("XiaoMi")){return new XiaoMi();} else if(CarType.equalsIgnoreCase("HuaWei")){return new HuaWei();} else if(CarType.equalsIgnoreCase("Tesla")){return new Tesla();}return null;}
}

最后,实现调用(生产):

public class CarTest {public static void main(String[] args){CarFactory carFactory = new CarFactory();carFactory.getCar("xiaomi").draw();carFactory.getCar("huawei").draw();carFactory.getCar("tesla").draw();}
}

生成结果:

在这里插入图片描述

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

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

相关文章

网络流问题详解

1. 网络最大流 1.1 容量网络和网络最大流 1.1.1 容量网络 设 G(V, E)是一个有向网络,在 V 中指定了一个顶点,称为源点(记为 Vs),以及另一个顶点,称为汇点(记为 Vt);对…

基于java+springboot+vue实现的校园一卡通系统(文末源码+Lw+ppt)23-26

摘 要 近些年来,随着科技的飞速发展,互联网的普及逐渐延伸到各行各业中,给人们生活带来了十分的便利,校园一卡通利用计算机网络实现信息化管理,使整个校园一卡通管理的发展和服务水平有显著提升。 本文拟采用java技…

Aws Nat Gateway

要点 NAT网关要能访问外网,所以需要部署在有互联网网关的Public子网中。 关键: NAT网关创建是选择子网,一定要选择公有子网(有互联网网关子网) 特别注意: 新建nat网关的时候,选择的子网一定…

【C++】哈希结构

目录 一,哈希结构的认识 1-1,哈希思想 1-2,哈希函数 1-3,哈希冲突 1-3-1,闭散列 1-3-2,开散列 二,哈希结构的封装实现 2-1,闭散列封装实现 ​编辑 2-2,开散列封…

genetic algorithm

genetic algorithm 遗传算法

C++入门5.内联函数,auto关键字,基于范围的for循环(C++11),指针空值nullptr(C++11)

本篇是C过度C初始的最后一篇,快快对入门须知的知识有个印象后,就可以顺顺利利的学习C的类了。 目录 内联函数: 内联函数的特性: auto关键字(C11): auto简介: 使用细则: auto不能推导的场…

基于java+springboot+vue实现的物业管理系统(文末源码+Lw+ppt)23-23

摘 要 快速发展的社会中,人们的生活水平都在提高,生活节奏也在逐渐加快。为了节省时间和提高工作效率,越来越多的人选择利用互联网进行线上打理各种事务,通过线上物业管理系统也就相继涌现。与此同时,人们开始接受方…

K8S基础概念

一、MASTER Kubernetes里的Master指的是集群控制节点,在每个Kubernetes集群里都需要有一个Master来负责整个集 群的管理和控制,基本上 Kubernetes的所有控制命令都发给它,它负责具体的执行过程,我们后 面执行的所有命 令基本都…

idea2024.1发布,lambda多语句的内联断点,增强spring图标等新特性,你没玩过的全新版本

这里是weihubeats,觉得文章不错可以关注公众号小奏技术 简述 2024-04-04 idea官方宣布发布了 一些重大更新 随后我便下载了你没玩过的全新版本IntelliJ IDEA Ultimeate版本试玩 然后脑子里面想到这个 开玩笑 实际下载完是这样 更新内容 更新的内容比较多 关键亮点主要有如下…

Redis入门到通关之数据结构解析-RedisObject

文章目录 ☃️概述☃️源码 ☃️概述 RedisObject 是 Redis 中表示数据对象的结构体,它是 Redis 数据库中的基本数据类型的抽象。在 Redis 中,所有的数据都被存储为 RedisObject 类型的对象。 RedisObject 结构体定义如下(简化版本&#xf…

MDC搭配ttl

1.MDC 1.简介 MDC 介绍​ MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能。MDC 可以看成是一个与当前线程绑定的Map,可以往其中添加键值对。MDC 中包含的内容可…

CSS实现广告自动轮播

实现原理 该广告轮播功能的实现主要依靠HTML和CSS。HTML负责搭建轮播框架,而CSS则控制样式和动画效果。通过CSS中的关键帧动画(Keyframes),我们可以定义图片在容器内的滚动效果,从而实现轮播功能。 HTML结构 首先&am…

如何搭建线下陪玩系统(本地伴游、多玩圈子)APP小程序H5多端前后端源码交付,支持二开!

一、卡顿的优化方法 1、对陪玩系统源码中流媒体传输的上行进行优化,通过提升推流端的设备性能配置、推流边缘CDN节点就近选择等方式解决音视频数据源流的卡顿。 2、对陪玩系统源码中音视频数据的下载链路进行优化,通过选择更近更优质的CDN边缘节点来减少…

Navicat导入sql文件图文教程

本文使用的MySQL工具为:Navicat.默认已经连接数据库!! 步骤: 1.右键自己的数据库,选择新建数据库. 2.输入数据库名称,字符集选择“utf8”,排序规则选择“ utf8_general_ci”,确定. 3.双击新建好的“数据库”。右键点击“运行SQL文件”。 4.选择本地的s…

linux信号相关概念

signal 信号引入什么是信号?如何产生信号?通过按键产生信号调用系统函数向进程发信号系统调用函数发送信号的流程: 由软件条件产生信号软件发送信号的流程: 硬件异常产生信号硬件异常的流程: Deliver、Pending、Block概念信号在内…

Vue 查看真实请求地址

当你在项目中配置了proxy代理,前端在浏览器开发调试的时候,是看不到真是的请求地址的。 这时候,后端要说话了:你这连的是我的地址吗?网络里这显示的也不对吧~ 前端: 额、不是在这里看的。既然你不相信我,…

替代普通塑料吸头的PFA移液吸头

目前市场上的规格:0.01ml、0.05ml、0.1ml、0.2ml、0.5ml、1ml、2ml、5ml、10ml等均可定制加工PFA材质枪头,可以适配市场上大部分移液枪,普兰德,大龙,赛默飞,赛多利斯,力辰、吉尔森,瑞…

K8S哲学 - probe 探针

探针分类: liveness probe readiness probe startup probe Liveness Probe:用于检查容器是否还在运行。如果 Liveness Probe 失败,Kubernetes 会杀死容器,然后根据你的重启策略来决定是否重新启动容器。常见的做法是使用与 Readin…

error解决expression before ‘static‘

问题现象 报警如下 跳转到提示第125行,但是这行明显是没有问题的。 问题分析 经过排查可以看到,是120行的末尾\在S32DS编译器里面被认为是“接下一行”的意思,120行注释掉之后,后面的121行、122行、123行均被注释掉,…

2024年3月 青少年软件编程(图形化) 等级考试试卷(一级)

2024.3青少年软件编程(图形化) 等级考试试卷(一级) 一、 单选题(共 25 题, 共 50 分) 1.单击下列哪个按钮, 能够让舞台变为“全屏模式” ? ( ) A. B. C. D. 标准答案&am…