java25种设计模式之工厂模式
Java设计模式 - 工厂模式
工厂模式是一种创建模式,因为此模式提供了更好的方法来创建对象。
在工厂模式中,我们创建对象而不将创建逻辑暴露给客户端。
例子
在以下部分中,我们将展示如何使用工厂模式创建对象。
由工厂模式创建的对象将是形状对象,如圆形,矩形。
首先,我们设计一个接口来表示Shape。
public interface Shape {void run();
}
然后我们创建三个实现接口的具体类。
以下代码用于Rectangle.java
public class Rectangle implements Shape {public void run() {System.out.println("Rectangle");}
}
Square.java
public class Square implements Shape {public void run() {System.out.println("Square");}
}
Circle.java
public class Circle implements Shape {public void run() {System.out.println("Circle");}
}
工厂模式的核心是一个Factory类。以下代码显示了如何为Shape对象创建Factory类。
ShapeFactory类基于传递给getShape()方法的String值创建Shape对象。如果String值为CIRCLE,它将创建一个Circle对象。
public class ShapeFactory {private Map<String, Shape> map = new HashMap<String, Shape>();public ShapeFactory() {map.put("rectangle",new Rectangle());map.put("square",new Square());map.put("circle",new Circle());}public Shape getShape(String type) {return map.get(type);}
}
我们在工厂类里面构造一个方法来存放我们工厂所有的实现类,这里不一定这样写,只要在调用getShape方法的时候能够根据不同的类型拿到对应的实现类工厂就可以了,有的这样写也可以,只是不太优雅而已
public class ShapeFactory {public Shape getShape(String shapeType){if(shapeType == null){return null;} if(shapeType.equalsIgnoreCase("circle")){return new Circle();} else if(shapeType.equalsIgnoreCase("rectangle")){return new Rectangle();} else if(shapeType.equalsIgnoreCase("square")){return new Square();}return null;}
}
接下来我们来测试一下工厂模式
以下代码具有main方法,并且它使用Factory类通过传递类型等信息来获取具体类的对象。
public class TestDemo
{public static void main(String [] args){ShapeFactory shapeFactory = new ShapeFactory();Shape rectangle = shapeFactory.getShape("rectangle");rectangle.run();Shape circle = shapeFactory.getShape("circle");circle.run();Shape square = shapeFactory.getShape("square");square.run();}
}
上面的代码生成以下结果。
总结:工厂模式就是多个实现类继承一个接口类实现同一个接口,工厂类初始化所有实现类,并标记不同实现类,调用是根据标记获得实现类执行方法。
相关文章:
java25种设计模式之工厂模式
Java设计模式 - 工厂模式 工厂模式是一种创建模式,因为此模式提供了更好的方法来创建对象。 在工厂模式中,我们创建对象而不将创建逻辑暴露给客户端。 例子 在以下部分中,我们将展示如何使用工厂模式创建对象。 由工厂模式创建的对象将是…...
力扣-2020年最后一次登录
大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:1890. 2020年最后一次登录二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.…...
[蓝桥杯] 数学与简单DP问题
文章目录 一、简单数学问题习题练习 1、1 买不到的数目 1、1、1 题目描述 1、1、2 题解关键思路与解答 1、2 饮料换购 1、2、1 题目描述 1、2、2 题解关键思路与解答 二、DP问题习题练习 2、1 背包问题 2、1、1 题目描述 2、1、2 题解关键思路与解答 2、2 摘花生 2、2、1 题目…...
浏览器的渲染过程解析
文章目录浏览器渲染进程有哪些?浏览器的渲染过程浏览器渲染进程有哪些? GUI线程:负责渲染浏览器页面,解析html,css,构建DOM树,CSS规则树,渲染树和绘制页面,当界面需要重…...
【C++容器】std::fstream读写文件错误【2023.03.03】
std::fstream使用细节 1.文件不存不支持时打开文件模式不得有ios::in • 如果文件不存在且打开时包括了ios::in模式则打开文件会失败。 fstream m_f;m_f.open("d://123.csv", ios::in | ios::out | ios::binary);//文件不存在则会打开失败• 我这边尝试行得通的做…...
UVM实战--带有寄存器的加法器
一.整体的设计结构图 这里将DUT换成加法器,可以理解为之前UVM加法器加上寄存器,这里总线的功能不做修改,目的看代码的移植那些部分需要修改。 二.各个组件代码详解 2.1 DUT module dut( input clk, input rst_n, input…...
笔记--学习mini3d代码
主要是记录学习mini3d代码时,查的资料; 从github下载的代码: GitHub - skywind3000/mini3d: 3D Software Renderer in 700 Lines !!3D Software Renderer in 700 Lines !! Contribute to skywind3000/mini3d development by creating an a…...
图片服务器
文章目录一、项目简介二、功能及场景三、业务设计四、数据库设计准备图片表准备实体类五、API设计常用功能封装文件上传文件上传获取图片列表接口获取图片内容删除图片接口六、项目优化七、测试自动化测试测试用例一、项目简介 图片服务器:解决项目中插入图片的问题…...
【JAVA程序设计】【C00110】基于SSM(非maven)的车辆维修管理系统
基于SSM(非maven)的车辆维修管理系统项目简介项目获取开发环境项目技术运行截图项目简介 基于ssm框架非maven开发的车辆维修管理系统共分为三个角色:管理员、用户 管理员角色包含以下功能: 查看用户、添加用户、查看车辆信息、故…...
微积分小课堂:用动态的眼光去找问题的最优解(最大值/最小值)【中学里的解题技巧】
文章目录 引言I 最优化问题1.1 不同形式的最优化1.2 用动态的眼光去找问题的最优解引言 把比较数大小的问题,变成了寻找函数变化拐点的问题,将这两个问题等同起来,需要发明一种工具,叫做导数。有了导数这个工具,求最大值问题就变成了解方程的问题。 用变化的眼光找到最优…...
网络爬虫和相关工具
在理想的状态下,所有ICP(Internet Content Provider)都应该为自己的网站提供API接口来共享它们允许其他程序获取的数据,在这种情况下爬虫就不是必需品,国内比较有名的电商平台(如淘宝、京东等)、…...
OSSFs挂载工具简介
OSSFs挂载工具 OSSFs挂载工具简介 ossfs允许您在Linux系统中将对象存储OSS的存储空间(Bucket)挂载到本地文件系统。挂载完成后,您能够像操作本地文件一样操作OSS的对象(Object),从而实现数据共享。 …...
Spring 容器创建初始化,获取bean流程分析
Spring 容器创建初始化,获取bean流程分析 Spring 容器创建初始化 流程分析 1、首先读取bean.xml 文件 2、扫描指定的包 com.hspedu.spring.component 2.1、扫描包,得到bean的class对象,排除包下不是bean的 2.2、扫描将bean信息封装BeanDef…...
无聊小知识.03 Springboot starter配置自动提示
1、前言Springboot项目配置properties或yaml文件时候,会有很多spring相关的配置提示。这个是如何实现的?如果我们自己的配置属性,能否也自动提示?2、Springboot配置自动提示其实IDE是通过读取配置信息的元数据而实现自动提示的。S…...
2023-03-03 mysql-join类别-分析
目录 摘要: mysql版本: DDL: 表结构: 插入数据: JOIN: 一. SELECT 二. INNER JOIN...
Saleen 系列来袭!
由 Ghostopunch 创作👻🥊 Ghostpunch 将 Saleen Automotive 带入 The Sandbox 元宇宙! 是 Saleen Automotive 于 1984 年由汽车界的梦想家 Steve Saleen 创立,目标是将经过比赛验证的性能带入大街小巷和元宇宙……😉 5…...
如何优雅地处理Java中的null值?使用Optional类来实现!
当我们在Java编程时,经常会遇到处理null值的问题。在Java 8中,引入了一个Optional类来解决这个问题。Optional类可以看作是一个容器,用于包装一个可能为null的值。它提供了一些方便的方法,以优雅地处理null值的情况。 下面我将详…...
巾帼绽芬芳 一起向未来(中篇)
编者按:为了隆重纪念纪念“三八”国际妇女节113周年,快来与你全方位、多层次分享交流“三八”国际妇女节的前世今生。分上篇(节日简介、节日发展和节日意义)、中篇(节日活动宗旨和世界各国庆祝方式)和下篇&…...
espnet training
from:ESPnet2 — ESPnet 202301 documentation from :Change the configuration for training — ESPnet 202301 documentation 训练完之后微调的命令: ./run.sh --stage 11 --ngpu 1 --asr_args "--max_epoch 205 --optim_conf lr=0.1 --resume true" --asr_exp…...
qsort函数的应用以及模拟实现
前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:介绍库函数qsort函数的模拟实现和应用 金句分享: ✨追…...
从PASCAL VOC到Cityscapes:手把手教你用PyTorch复现经典分割模型并跑通自己的数据集
从PASCAL VOC到Cityscapes:手把手教你用PyTorch复现经典分割模型并跑通自己的数据集 图像分割作为计算机视觉领域的核心任务之一,正在智能驾驶、医疗影像分析等领域展现出巨大价值。但对于初学者而言,从理论到实践的跨越往往充满挑战——数据…...
如何快速解决macOS证书信任问题:res-downloader完整配置指南
如何快速解决macOS证书信任问题:res-downloader完整配置指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 在ma…...
Claw Companion:OpenClaw网关的移动控制中心设计与实战
1. 项目概述:Claw Companion,一个为OpenClaw网关打造的移动控制中心如果你正在寻找一个能让你在手机上轻松管理OpenClaw网关的工具,那么Claw Companion for Android(以下简称Claw Companion)绝对值得你花时间深入了解。…...
别再只调参了!手把手教你用EfficientNet-B0的MBConv和SENet模块,在PyTorch里复现一个轻量级分类网络
从零构建EfficientNet-B0核心模块:MBConv与SENet的PyTorch实战指南 当你第一次看到EfficientNet论文中那些复杂的结构图时,是否感到无从下手?作为计算机视觉领域的重要里程碑,EfficientNet系列模型以其出色的性能与效率平衡著称。…...
【权威发布】上海市交通委WAIC组委会联合签发:2026 AI大会专属绿色通道实施细则(含VIP车辆备案码申领入口)
更多请点击: https://intelliparadigm.com 第一章:2026年AI技术大会交通指南 抵达主会场的三种推荐方式 2026年AI技术大会主会场位于上海张江科学城AI创新港A栋,建议优先选择地铁、接驳巴士或绿色骑行三种低碳通勤方式。地铁2号线“张江高…...
3种终极方案破解Navicat Mac版14天试用限制:一键无限重置教程
3种终极方案破解Navicat Mac版14天试用限制:一键无限重置教程 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还在…...
为团队内部工具配置Taotoken以实现安全可控的AI能力调用
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为团队内部工具配置Taotoken以实现安全可控的AI能力调用 当团队的自研工具或平台需要集成大模型能力时,直接管理多个厂…...
程序员学英语:用词根‘ori’和‘pan’搞定技术文档里的‘起源’与‘伙伴’
程序员学英语:用词根‘ori’和‘pan’破解技术文档高频词 技术文档里那些似懂非懂的英文词汇,往往成为程序员阅读源码、理解API的隐形门槛。当你在GitHub看到origin remote时,是否思考过为什么代码仓库的默认远程分支叫这个名字?当…...
MindSpore分布式并行原理与实战
随着深度学习模型参数量与数据集规模呈指数级增长,单卡训练已无法满足效率与内存需求,分布式并行训练成为突破性能瓶颈的核心方案。MindSpore作为华为自研的全场景AI框架,内置完善的分布式并行能力,支持数据并行、半自动并行、自动…...
Cursor Rules配置指南:精准控制AI编程助手上下文,提升开发效率
1. 项目概述:Cursor Rules 是什么,以及为什么你需要它如果你是一名开发者,尤其是深度使用 Cursor 这款 AI 编程工具的开发者,那么你很可能已经体会过“上下文混乱”的烦恼。当你打开一个项目,试图让 AI 助手帮你写代码…...
