当前位置: 首页 > news >正文

【设计模式】创建型设计模式-工厂模式的实现

工厂模式实现

  • 定义
    • 例子
    • UML类图理解
    • Java代码实现
    • 总结

定义

工厂方法模式定义了一个接口用于创建对象,该模式由子类决定实例化哪个工厂类。该模式把类的实例化推迟到了子类。

例子

通过一个公共的类方法来管理画图对象的创建。

UML类图理解

UML类图

Java代码实现

  1. 定义接口类 - 定义所有图形的接口 他们有一个公共的方法 draw用于绘制图形
public interface Shape {void draw();
}
  1. 通过接口类实现Circle和Rectangle类
public class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("Rectangle");}
}
  1. 实现工厂类,工厂类中实现一个可以根据参数控制生成的方法
public class ShapeFactory {// 根据参数判断生成要实例化哪个类public Shape getShape(String shapeType) {if (shapeType.equalsIgnoreCase("rectangle")) {return new Rectangle();} else if (shapeType.equalsIgnoreCase("square")) {return new Circle();}return null;}
}
  1. 在具体的业务中使用
public class FactoryPatternDemo {public static void main(String[] args) {// 使用工厂类ShapeFactory shapeFactory = new ShapeFactory();// 通过参数决定实例化哪个类 在子类中实例化Shape shape = shapeFactory.getShape("rectangle");System.out.println(shape);shape = shapeFactory.getShape("square");System.out.println(shape);}
}

总结

一类具有相同特征的产品,比如图形等,可以使用一个工厂类来选择性的将他们实例化。

相关文章:

【设计模式】创建型设计模式-工厂模式的实现

工厂模式实现 定义例子UML类图理解Java代码实现总结 定义 工厂方法模式定义了一个接口用于创建对象,该模式由子类决定实例化哪个工厂类。该模式把类的实例化推迟到了子类。 例子 通过一个公共的类方法来管理画图对象的创建。 UML类图理解 Java代码实现 定义接口…...

【分布式】CAP理论

CAP定理的核心要点: CAP定理指出,任何一个分布式系统在面对网络分区(Partition)的情况下,最多只能同时满足以下三个特性中的两个: 一致性(Consistency): 所有节点在同一…...

市域社会治理现代化解决方案-2

1. 社会治理现代化背景 市域社会治理现代化旨在通过制度化、科学化、规范化、程序化和精细化的治理体系,实现社会治理能力的提升。该方案强调市一级的统筹协调和资源技术优势,以有效应对新型社会矛盾和风险挑战。 2. 社会治理面临的问题 当前社会治理在实践中存在诸多问题…...

谷歌浏览器的自动翻译功能如何开启

在当今全球化的网络环境中,能够流畅地浏览不同语言的网页是至关重要的。谷歌浏览器(Google Chrome)提供了一项强大的自动翻译功能,可以帮助用户轻松跨越语言障碍。本文将详细介绍如何开启和使用谷歌浏览器的自动翻译功能&#xff…...

Linux设置socks代理

公司里绝大多数主机已经禁止外网访问,仅保留一台主机设置socks作为代理服务器。如下为对socks这一概念的学习整理 什么是socks 是一种OSI模型下会话层的协议,位于表示层与传输层之间,作用是: exchanges network packets between…...

【ACM出版】第四届信号处理与通信技术国际学术会议(SPCT 2024)

& 第四届信号处理与通信技术国际学术会议(SPCT 2024) 2024 4th International Conference on Signal Processing and Communication Technology 2024年12月27-29日 中国深圳 www.icspct.com 第四届信号处理与通信技术国际学术会议&#x…...

蓝队技术学习

声明: 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文 章。本文只涉及学习内容,其他的都与本人无关,切莫逾越法律红线, 否则后果自负 蓝队技术基础 1.企业网络架构:企业技术和信息团队的管理架构因企业而异。 CIO(Chief Informa…...

openpyxl处理Excel模板,带格式拷贝行和数据填入

本文中用openpyxl操作Excell 模板,进行行拷贝和数据填充. 主要涉及单元格格式的拷贝,合并单元格的拷贝,行高和列宽的处理. 将模板表格分为三部分,头部,中间循环填充部分,尾部.模板参数中设置头部高度,循环部分高度,剩余为尾部. 拷贝时先拷贝填充头部 ,然后根据数据循环拷贝填…...

无法在带有 WHM/cPanel 的 Ubuntu 22.04 服务器上安装 PHP 7.x – 缺少软件包

问题 正在使用Ubuntu 22.04设置服务器,并使用WHM/cPanel管理多个帐户和配置。我的目标是在服务器上安装 PHP 7.4(或更早的版本,如 PHP 7.3),因为我的一些应用程序与 PHP 8.x 不兼容。问题是,每当我尝试安装…...

数据结构-递归函数的调用栈过程

这道题考察的是递归函数的调用栈过程。 逐步分析程序的执行过程: main() 函数首先被调用,此时栈底是 main() 的信息。main() 函数调用 S(1),此时 S(1) 的信息被压入栈中,位于 main() 之上。S(1) 函数内部调用 S(0),因…...

在 WPF 中,如何实现数据的双向绑定?

在 WPF 中,数据绑定是一个非常重要的特性,它允许 UI 与数据源之间自动同步。双向绑定是一种常见的绑定方式,当数据源更新时,UI 会自动更新;同样,当 UI 中的元素(如文本框)发生改变时…...

pyinstaller 打包 playwright -- 如何将浏览器打包到程序中

start 最近玩了玩 playwright,记录一下遇到的问题。 1. 如何在 python 中使用 安装 pip install playwright安装浏览器驱动 playwright install查看浏览器驱动安装的位置 playwright install --dry-run2. 如何将浏览器打包的程序中 先找到我们使用 pip 安装…...

vue系列=状态管理=Pinia使用

1、Pinia基本概念 1、Pinia向外暴露了几个重要的函数,分别是createPinia、defineStore和storeToRefs 2、pinia有五个核心管理概念: store、store、getters、action、plugins 2、Pinia基本使用 1、安装过程 1、安装pinia插件:npm install pini…...

[HarmonyOS]简单说一下鸿蒙架构

鸿蒙操作系统(HarmonyOS)是由华为公司开发的一款面向全场景的操作分布式系统。它旨在提供一个统一的操作系统平台,支持多种设备,包括智能手机、平板电脑、智能电视、可穿戴设备、智能家居等。鸿蒙架构的设计目标是实现设备之间的无…...

【Python TensorFlow】进阶指南(续篇一)

在前两篇文章中,我们介绍了TensorFlow的基础知识及其在实际应用中的初步使用,并探讨了更高级的功能和技术细节。本篇将继续深入探讨TensorFlow的高级应用,包括但不限于模型压缩、模型融合、迁移学习、强化学习等领域,帮助读者进一…...

机器视觉和计算机视觉的区别

机器视觉和计算机视觉的区别 1、本质上两者是一样的,都是将光信号转换成电信号,然后交给计算机处理; 2、二者侧重点不同,计算机视觉更偏向研究,更前沿,采集到图像后交给计算机进行分析处理,包括…...

RDD 算子全面解析:从基础到进阶与面试要点

Spark 的介绍与搭建:从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交:本地与集群模式全解析-CSDN博客 Spark on YARN:Spark集群模式…...

Vue.js动态组件使用

在 Vue.js 中&#xff0c;动态组件是一种功能强大的特性&#xff0c;它允许你在同一个挂载点根据条件动态地切换不同的组件。这通常通过 Vue 的 <component> 元素和 is 特性来实现。以下是如何在 Vue 3 中使用动态组件的详细指南&#xff1a; 基本用法 定义组件&#xf…...

智能合约在供应链金融中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 智能合约在供应链金融中的应用 智能合约在供应链金融中的应用 智能合约在供应链金融中的应用 引言 智能合约概述 定义与原理 发展…...

【大数据技术基础 | 实验十】Hive实验:部署Hive

文章目录 一、实验目的二、实验要求三、实验原理四、实验环境五、实验内容和步骤&#xff08;一&#xff09;安装部署&#xff08;二&#xff09;配置HDFS&#xff08;三&#xff09;启动Hive 六、实验结果&#xff08;一&#xff09;启动结果&#xff08;二&#xff09;Hive基…...

3步解锁B站4K视频:bilibili-downloader零基础使用指南

3步解锁B站4K视频&#xff1a;bilibili-downloader零基础使用指南 【免费下载链接】bilibili-downloader B站视频下载&#xff0c;支持下载大会员清晰度4K&#xff0c;持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为无法保存B站4…...

工业以太网双雄:从协议原理到选型落地,EtherCAT与PROFINET实战解析

1. 工业以太网的双雄之争&#xff1a;为什么选型这么难&#xff1f; 第一次接触工业以太网协议选型时&#xff0c;我盯着EtherCAT和PROFINET的参数表发呆了整整一上午。就像面对两个各有所长的武林高手&#xff0c;一个轻功了得&#xff0c;一个内力深厚&#xff0c;实在难以抉…...

【QT】-- QT操作数据库

前言&#xff1a; Qt是C一个开发框架&#xff0c;具有跨平台特性。这篇是作者大二学习的时候做的笔记&#xff0c;有可能有错误&#xff0c;请各位批评指正。这篇记录QT操作数据库。欢迎大家收藏 关注&#xff0c;作者将会持续更新。 文章目录Qt 操作数据库QSqlDatabase数据库…...

ClawdBot代码实例:修改clawdbot.json实现模型热切换实操

ClawdBot代码实例&#xff1a;修改clawdbot.json实现模型热切换实操 1. 引言&#xff1a;你的个人AI助手&#xff0c;想换模型就换模型 想象一下&#xff0c;你有一个24小时在线的AI助手&#xff0c;它能帮你写代码、回答问题、整理文档。但用久了&#xff0c;你可能会想&…...

威纶通宏指令实战:从零构建中文输入与智能配方检索系统

1. 威纶通触摸屏的中文输入困境与破解之道 第一次接触威纶通中低端触摸屏时&#xff0c;我就被它缺乏中文输入支持的问题给难住了。当时接了个食品包装机的项目&#xff0c;客户要求操作界面必须支持中文输入&#xff0c;方便工人记录生产批号和产品信息。市面上常见的中高端HM…...

ShardingSphere-Proxy 5.2 容器化部署与开发调试实战指南

1. 为什么选择ShardingSphere-Proxy 5.2作为开发调试工具 在分库分表场景下开发应用时&#xff0c;最让人头疼的就是数据查询和调试问题。想象一下&#xff0c;你的订单数据被分散在4个库的8张表中&#xff0c;每次测试时想确认数据是否正确写入&#xff0c;都得手动连接不同数…...

别再手动整理了!用Python脚本5分钟搞定ImageNet验证集标签映射(附完整代码)

5分钟极速搞定ImageNet验证集标签映射&#xff1a;Python自动化实战指南 每次处理ImageNet验证集时&#xff0c;你是否也对着那些晦涩的数字标签头疼不已&#xff1f;手动查表不仅效率低下&#xff0c;还容易出错。今天我们就来彻底解决这个痛点——用Python脚本自动完成标签映…...

S32K312实战:用AUTOSAR Icu模块测量PWM占空比与周期(基于NXP MCAL与EB Tresos)

S32K312实战&#xff1a;AUTOSAR Icu模块精准测量PWM信号的工程实践 在汽车电子开发中&#xff0c;PWM信号的精确测量是ECU功能实现的基础环节。无论是发动机控制单元中的转速信号采集&#xff0c;还是车身电子中的执行器状态反馈&#xff0c;都需要对PWM信号的周期、占空比等参…...

5分钟搞定OpenCV摄像头实时监控(附Jupyter避坑指南)

5分钟搞定OpenCV摄像头实时监控&#xff08;附Jupyter避坑指南&#xff09; 在计算机视觉领域&#xff0c;实时摄像头监控是最基础也最实用的功能之一。无论是安防监控、人脸识别还是简单的视频采集&#xff0c;OpenCV都提供了简洁高效的接口。但对于Python初学者和Jupyter Not…...

基于PostGIS与SpringBoot构建高性能动态MVT矢量瓦片服务

1. 为什么需要动态矢量瓦片服务 第一次接触矢量瓦片是在2018年做智慧城市项目时&#xff0c;当时前端同事抱怨加载行政区划数据太慢。一个省级行政区划的GeoJSON文件大小超过10MB&#xff0c;每次打开网页都要等半天。后来尝试了Mapbox的矢量瓦片方案&#xff0c;加载速度直接提…...