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

server/2024/11/15 0:04:33/

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

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

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

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

具体代码如下:

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

java">public interface Car {void draw();
}

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

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

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

java">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;}
}

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

java">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.ppmy.cn/server/4844.html

相关文章

【C语言】贪吃蛇项目(2)- 实现代码详解

文章目录 前言一、游戏开始界面设计首先 - 打印环境界面其次 - 游戏地图、蛇身及食物的设计1、地图2、蛇身设置及打印3、食物 二、游戏运行环节蛇的上下左右移动等功能蛇的移动 三、结束游戏代码 前言 在笔者的前一篇博客中详细记载了贪吃蛇项目所需的一些必备知识以及我们进行…

期货交易系统有哪些?资管分仓系统时什么?

交易软件有哪些?接下来逐一介绍。 一、交易软件,我们可以选择期货公司自研软件或者第三方交易软件,目前好评比较多的期货交易软件有:文华财经、博易大师、同花顺期货通。 1、文华财经 界面简约,容易上手,云…

【6】mysql查询性能优化-关联子查询

【README】 0. 先说结论:一般用inner join来改写in和exist,用left join来改写not in,not exist;(本文会比较内连接,包含in子句的子查询,exist的性能 ) 1. 本文总结自高性能mysql 6…

Python框架django项目

创建一个 Django 项目是一个很好的方式来学习和实践 Python web 开发。以下是创建 Django 项目的基本步骤: 步骤: 安装 Django: 首先,确保你已经安装了 Python。然后,使用 pip 安装 Django: pip install d…

Java多线程+并发 快问快答

这是Java多线程和Java并发这两个八股文的快问快答。其实我就会这点,感觉多线程和并发这里并不需要了解的很深入,我也就没有建立起系统观。把这些零零散散的知识点理解好应该就行了。感觉中小厂不会问这么难,中小厂就问一些简单的。 关于线程安…

使用 usePrevious 实现 React 函数组件中上一状态值的追踪

在 React 开发过程中,有时我们需要在函数组件的某个阶段或事件处理函数中访问到上一次的状态值。然而,React 并未提供直接获取上一状态的内置机制。为了解决这个问题,我们可以采用一种名为 usePrevious 的自定义 Hook。本文将详细介绍 usePre…

结合 react-webcam、three.js 与 electron 实现桌面人脸动捕应用

系列文章目录 React 使用 three.js 加载 gltf 3D模型 | three.js 入门React three.js 3D模型骨骼绑定React three.js 3D模型面部表情控制React three.js 实现人脸动捕与3D模型表情同步结合 react-webcam、three.js 与 electron 实现桌面人脸动捕应用 示例项目(github)&…

项目实现:Boost搜索引擎

目录 一.项目背景 二. 搜索引擎的宏观原理 三.使用到的技术栈与项目环境 四.正排索引vs倒排索引 五.认识标签与去标签 六.建立索引模块 七,编写http服务端 八,编写前端页面 九.搜索结果的优化 遇到的问题: 项目源码:boos…