设计模式 -- 工厂模式(Factory Pattern)
介绍
- 意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
- 主要解决问题:我们明确地计划不同条件下创建不同实例时使用,主要解决接口选择的问题。
- 关键代码:主要解决接口选择的问题。
- 优点:1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。
- 缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。
示例 图形绘制工厂示例 三角形,圆形,矩形
- 创建一个接口
public interface Shape {void draw(); } - 创建实现接口的实体类
public class Triangle implements Shape {@Overridepublic void draw() {//绘制三角形} }public class Circle implements Shape {@Overridepublic void draw() {//绘制圆形} }public class Rectangle implements Shape {@Overridepublic void draw() {//绘制矩形} } - 创建一个工厂,生成基于给定信息的实体类的对象
public class ShapeFactory {//使用 getShape 方法获取形状类型的对象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;} } - 使用
public static void main(String[] args) {ShapeFactory shapeFactory = new ShapeFactory();//获取 Circle 的对象,并调用它的 draw 方法Shape shape1 = shapeFactory.getShape("CIRCLE");//调用 Circle 的 draw 方法shape1.draw();//获取 Rectangle 的对象,并调用它的 draw 方法Shape shape2 = shapeFactory.getShape("RECTANGLE");//调用 Rectangle 的 draw 方法shape2.draw();//获取 Square 的对象,并调用它的 draw 方法Shape shape3 = shapeFactory.getShape("SQUARE");//调用 Square 的 draw 方法shape3.draw(); }
相关文章:
设计模式 -- 工厂模式(Factory Pattern)
工厂模式:属于 创建型模 式,最常用的设计模式之一,提供了一种创建对象的最佳方式。 介绍 意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决…...
设计模式-08-适配器模式
经典的设计模式有23种,但是常用的设计模式一般情况下不会到一半,我们就针对一些常用的设计模式进行一些详细的讲解和分析,方便大家更加容易理解和使用设计模式。 1-适配器模式原理 适配器模式的英文翻译是Adapter Design Pattern。顾名思义&…...
北邮22级信通院数电:Verilog-FPGA(9)第九周实验(4)实现寄存器74LS374
北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分 1.1 reg_74LS374.v 1.2 reg_LS3…...
【Android】带下划线的TextView
序言 我们有时候需要一个类似这样的显示,上面是文字,下面是一条线 这样的显示效果是TextView实现不了的,需要我们自己进行修改一下。 实现 创建一个UnderlineTextView,继承系统的TextView class UnderlineTextView(mContext…...
图解未来:数据可视化引领智慧决策时代
图表和数据可视化在数据分析中的关键作用 引言: 在现代数据科学中,数据可视化扮演着至关重要的角色。通过图表和可视化工具,我们能够更直观、更有效地理解数据的分布、趋势和关联性。本文将深入讨论三个主要的数据可视化工具:mat…...
例解什么是Python装饰器
Python中的装饰器一直是一个比较难理解的概念,我自己理解的就是用一个函数去修改另一个函数,主要是为另一个函数添加计时等功能,而且不用改变另一个函数,这样就大大减少了另一个函数的维护成本。 这个装饰器,英文名就…...
EtherCAT从站EEPROM组成信息详解(3):字16-63邮箱、EEPROM信息
0 工具准备 1.EtherCAT从站EEPROM数据(本文使用DE3E-556步进电机驱动器)1 字10-63邮箱、EEPROM信息 1.1 字10-63组成规范 字10-63虽然包含的空间区域很大,但实际上仅包含引导状态下邮箱配置、标准邮箱配置、EEPROM大小、执行的SII标准版本…...
【文件读取/包含】任意文件读取漏洞 afr_1
1.1漏洞描述 漏洞名称任意文件读取漏洞 afr_1漏洞类型文件读取漏洞等级⭐漏洞环境docker攻击方式 1.2漏洞等级 高危 1.3影响版本 暂无 1.4漏洞复现 1.4.1.基础环境 靶场docker工具BurpSuite 1.4.2.靶场搭建 1.创建docker-compose.yml文件 version: 3.2 services: web: …...
(八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
一、五种算法(DBO、LO、SWO、COA、GRO)简介 1、蜣螂优化算法DBO 蜣螂优化算法(Dung beetle optimizer,DBO)由Jiankai Xue和Bo Shen于2022年提出,该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为…...
通义灵码,阿里巴巴的编程辅助工具
一、官网 通义灵码_智能编码助手_AI编程_人工智能-阿里云 二、安装VSCode 如何下载安装VSCode 三、VSCode安装通义灵码 1.访问扩展详情界面 方式1 访问通义灵码安装教程页面 方法2 访问VSCode市场中的TONGYI Lingma 点击 Install 按钮访问扩展详情界面 2.打开VSCode …...
Uniapp导出的iOS应用上架详解
目录 Uniapp导出的iOS应用上架详解 摘要 引言 苹果审核标准 苹果调试 注意事项和建议 总结 摘要 本文将探讨Uniapp导出的iOS应用能否成功上架的问题。我们将从苹果审核标准、性能影响、调试流程等多个方面进行深入分析,以及向开发者提供相关注意事项和建议。…...
计算机视觉基础(7)——相机基础
前言 从这一节开始,我们来学习几何视觉。中层视觉包括相机模型、单目几何视觉、对极几何视觉和多目立体视觉等。在学习几何视觉最开始,我们先来学习一下相机模型,了解相机的基本原理,了解相机如何记录影像。 一、数字相机 1.1 基…...
解决Github上的README无法显示图片
首先感谢博主的思路:思路 最近写了点东西提交到git 发现本地能查看md里的图片用的相对路径,提交到github就看不见,并且发现不只是我自己的仓库看不见,其他人的我也看不见。那就有问题了 解决:正常使用相对路径&…...
qnx 工程目录创建工具 addvariant
文章目录 前言一、addvariant 是什么二、addvariant 使用实例1. variant names 参数说明2. 创建一个可执行文件工程3. 创建一个动态库工程 总结参考资料 前言 本文主要介绍如何在qnx 开发环境中创建工程目录及其相关的配置文件(common.mk, Makefile 文件等) 软件版本ÿ…...
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)
第1章:视觉项目资料介绍与学习指南 相关知识: 介绍计算机视觉、OpenCV库,以及课程的整体结构。学习概要: 了解课程的目标和学习路径,为后续章节做好准备。重要性: 提供学生对整个课程的整体认识࿰…...
【AI视野·今日CV 计算机视觉论文速览 第278期】Mon, 30 Oct 2023
AI视野今日CS.CV 计算机视觉论文速览 Mon, 30 Oct 2023 Totally 50 papers 👉上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Image Clustering Conditioned on Text Criteria Authors Sehyun Kwon, Jaeseung Park, Minkyu Kim, Jaewoong Cho, Ernest…...
深度学习:多模态与跨模态
1 定义 1.1 多模态学习 多模态学习(Multimodal Learning)是一种利用来自多种不同感官或交互方式的数据进行学习的方法。在这个语境中,“模态”指的是不同类型的数据输入,如文本、图像、声音、视频等。多模态学习的关键在于整合和…...
大数据Hadoop之——部署hadoop+hive+Mysql环境(Linux)
目录 一、JDK的安装 1、安装jdk 2、配置Java环境变量 3、加载环境变量 4、进行校验 二、hadoop的集群搭建 1、hadoop的下载安装 2、配置文件设置 2.1. 配置 hadoop-env.sh 2.2. 配置 core-site.xml 2.3. 配置hdfs-site.xml 2.4. 配置 yarn-site.xml 2.5. 配置 ma…...
Python与ArcGIS系列(四)在地图文档中加入图层
目录 0 简述1 将图层添加到地图文档中2 将图层插入到地图文档0 简述 本篇介绍如何利用arcpy实现将图层添加到地图文档中,以及将图层插入到地图文档指定的位置。 1 将图层添加到地图文档中 arcpy的mapping模块提供的AddLayer()函数可以实现将图层添加到地图文档中。功能本质上…...
QT 程序异常崩溃
出现以下问题,大概率是你在修改代码时,在pro或者pri中增加了一些不存在的头文件或者cpp,使用BeyondCmp仔细对比,分享,希望帮助到你...
解密网页资源批量下载:ResourcesSaverExt实战配置指南
解密网页资源批量下载:ResourcesSaverExt实战配置指南 【免费下载链接】ResourcesSaverExt Chrome Extension for one click downloading all resources files and keeping folder structures. 项目地址: https://gitcode.com/gh_mirrors/re/ResourcesSaverExt …...
Omni-Vision Sanctuary 网络协议分析辅助:可视化网络数据包与流量模式识别
Omni-Vision Sanctuary 网络协议分析辅助:可视化网络数据包与流量模式识别 1. 网络数据可视化的新思路 网络工程师每天面对海量的数据包和流量日志,传统的分析工具往往需要依赖复杂的命令行操作和专业图表解读。而Omni-Vision Sanctuary模型为我们提供…...
背负式静电喷雾机的设计【solidworks三维、5张cad图纸论文、答辩稿】
背负式静电喷雾机作为现代农业装备中的关键设备,其设计需兼顾轻量化、高效性与操作便捷性。通过SolidWorks三维建模技术,可实现整机结构的虚拟装配与干涉检查,优化各部件的空间布局。例如,药箱与喷雾系统的集成设计需平衡容量与重…...
IDM开源工具免费使用指南:从安装到高级配置的完整实践
IDM开源工具免费使用指南:从安装到高级配置的完整实践 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script Internet Download Manager(IDM&am…...
颠覆式剧本创作:Dramatron如何用AI重构故事生成流程
颠覆式剧本创作:Dramatron如何用AI重构故事生成流程 【免费下载链接】dramatron Dramatron uses large language models to generate coherent scripts and screenplays. 项目地址: https://gitcode.com/gh_mirrors/dr/dramatron 痛点直击:剧本创…...
Qwen All-in-One场景解析:如何用轻量模型赋能边缘计算应用
Qwen All-in-One场景解析:如何用轻量模型赋能边缘计算应用 1. 引言:当边缘计算遇上大模型 想象一下,在一个智能工厂的质检工位上,摄像头捕捉到产品表面的微小瑕疵。传统的做法是:将图像上传到云端服务器,…...
SQLite在线查看器:浏览器中的数据库管理革命
SQLite在线查看器:浏览器中的数据库管理革命 【免费下载链接】sqlite-viewer View SQLite file online 项目地址: https://gitcode.com/gh_mirrors/sq/sqlite-viewer 在数据驱动的时代,SQLite数据库无处不在——从移动应用到桌面软件,…...
实战应用:基于快马平台开发排序算法性能对比分析工具
今天想和大家分享一个特别实用的工具开发经历——用InsCode(快马)平台快速搭建了一个排序算法性能对比分析工具。这个项目不仅帮我巩固了算法知识,还意外发现了很多实际应用中的细节问题,特别适合用来理解不同排序算法的实战表现。 1. 为什么需要这个工…...
实战踩坑:在华为ENSP模拟器上配置OSPF NSSA区域,为什么外部路由没传出去?
华为ENSP模拟器中OSPF NSSA区域外部路由失效的深度排查指南 当你在华为ENSP模拟器中配置OSPF NSSA区域时,是否遇到过这样的困境:明明按照教程步骤操作,外部路由却像被黑洞吞噬一般无法传递到其他区域?本文将带你深入这个技术迷宫的…...
换掉 Notepad++,事实证明它更牛逼!
提到文本编辑工具,大家肯定第一时间想到的是 Notepad 。Notepad 是一种流行的源代码编辑器,也是 Windows 用户的可靠记事本替代品。它是一个功能强大的实用程序,可在不占用大量存储空间的情况下提供最佳性能。不幸的是,它不适用于…...
