Java设计模式---工厂方法(Factory Method)模式
说明
工厂方法(Factory Method)模式是一种工厂模式,也叫多态性工厂(Poloymorphic Factory)模式。
工厂方法模式涉及如下角色:
- 抽象工厂角色:给出具体工厂角色必须实现的接口。
- 具体工厂角色:实现抽象工厂的接口,了解创建具体产品的逻辑,创建具体的产品。
- 抽象产品角色:给出具体产品的共同接口。可以使用标记接口(即接口是空的)。
- 具体产品角色:实现抽象产品的接口。
- 客户端角色:调用工厂角色创建具体的产品。
一般来说,工厂角色的层级和产品角色的层级是相对应的。先把产品角色的层级规划好,再规划工厂角色的层级。
示例
一个简单的示例
定义一个抽象产品,这是一个标记接口:
package com.thb;public interface Graphic {}
定义两个具体产品:
package com.thb;public class Circle implements Graphic {}
package com.thb;public class Rectangle implements Graphic {}
定义一个抽象工厂:
package com.thb;public interface Factory {Graphic create();
}
因为有两个具体产品,所以定义两个具体工厂:
package com.thb;public class CircleFactory implements Factory {@Overridepublic Graphic create() { return new Circle();}}
package com.thb;public class RectangleFactory implements Factory {@Overridepublic Graphic create() { return new Rectangle();}}
定义一个客户端,进行调用:
package com.thb;public class Client {private static Graphic circle;private static Graphic rectangle;private static Factory circleFactory;private static Factory rectangleFactory;public static void main(String[] args) {circleFactory = new CircleFactory();rectangleFactory = new RectangleFactory();circle = circleFactory.create();rectangle = rectangleFactory.create();}}
相关文章:
Java设计模式---工厂方法(Factory Method)模式
说明 工厂方法(Factory Method)模式是一种工厂模式,也叫多态性工厂(Poloymorphic Factory)模式。 工厂方法模式涉及如下角色: 抽象工厂角色:给出具体工厂角色必须实现的接口。具体工厂角色&a…...
MySQL的关键指标及采集方法
MySQL 是个服务,所以我们可以借用 Google 四个黄金指标的思路来解决问题。 1、延迟 应用程序会向 MySQL 发起 SELECT、UPDATE 等操作,处理这些请求花费了多久,是非常关键的,甚至我们还想知道具体是哪个 SQL 最慢,这样…...
协程怎么解释?Python 中的协程如何实现?Celery 的协程并发引擎如何实现?
文章目录 1. 协程怎么解释?2. 为什么叫协程?3. coroutine 怎么读?4. asyncio 和 gevent 怎么实现协程?4. celery 并发引擎是什么?如何改为协程?5. 一个 celery 服务是否可以同时使用多个不同的引擎? 1. 协…...
Linux:shell脚本:基础使用(2)
test命令 格式1:test 条件表达式 格式2:[ 条件表达式 ] (前后至少应有一个空格) 常用的测试操作符 -d:测试是否为目录(Directory) -e:测试目录或文件是否存在(Exist) -f:测试是否…...
Mir 2.14 正式发布,Ubuntu 使用的 Linux 显示服务器
Canonical 公司最近发布了 Mir 2.14,这是该项目的最新版本。 Mir 2.14 在 Wayland 方面通过 ext-session-lock-v1 协议增加了对屏幕锁定器 (screen lockers) 的支持,并最终支持 Wayland 拖放。此外还整合了渲染平台的实现,放弃了之前在 Raspb…...
合规管理,企业生存之本!这4大方法,助你规避风险
当下,合规管理已成为企业必修的一门学问。无论是上市公司还是民营企业,都面临着日益严苛的监管合规要求。然而,许多企业在在应对频繁更新的合规要求时,仍然手忙脚乱,合规工作参差不齐。 专家分析认为,企业合规困境的主要症结在于,业务运转过程中产生了大量证明文件,但企业对其…...
码云 Gitee + Jenkins 配置教程
安装jdk 安装maven 安装Jenkins https://blog.csdn.net/minihuabei/article/details/132151292?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132151292%22%2C%22source%22%3A%22minihuabei%22%7D 插件安装 前往 Manage Jen…...
Java重启
Java启动! 前言祖师爷高斯林老爷子冯诺依曼 注释单行注释多行注释文档注释 标识符***【硬性规则】******【软性建议】*** 关键字结尾 前言 其实我在写这篇文章的时候已经完整地学过一遍Java校招需要掌握的大部分知识了,但是在最近找实习的过程中,我发现自己对于一些只是还是模…...
ReactNative 学习笔记
学习使用的开发工具 编译器 VSCode 开发语言工具 TypeScript 重要程度分类 一般 这个程度的知识点主要是达到熟练掌握即可,不用太深入研究和学习。 重要 这个程度的知识点主要是达到熟练掌握,并且内部的原理切要熟记,因为会关联到其他的知…...
小研究 - MySQL 数据库下存储过程的综合运用研究
信息系统工程领域对数据安全的要求比较高,MySQL 数据库管理系统普遍应用于各种信息系统应用软件的开发之中,而角色与权限设计不仅关乎数据库中数据保密性的性能高低,也关系到用户使用数据库的最低要求。在对数据库的安全性进行设计时…...
CentOS 7 构建 LVS-DR 群集 nginx负载均衡
1、基于 CentOS 7 构建 LVS-DR 群集。 DS(Director Server):DIP 192.168.231.132 & VIP 192.168.231.200 [root132 ~]# nmcli c show NAME UUID TYPE DEVICE ens33 c89f4a1a-d61b-4f24-a260…...
ESP32学习笔记(52)————三轴加速度ADXL345使用(SPI方式)
一、简介 ADXL345 是一款 ADI 公司推出的基于 iMEMS 技术的超低功耗3轴加速度计,分辨率高(13位),测量范围达 16g。数字输出数据为 16 位二进制补码格式,可通过 SPI(3线或4线) 或 I2C 数字接口访问。ADXL345 非常适合移动设备应用。它可以在倾…...
Camunda 7.x 系列【4】 Camunda Modeler 功能介绍
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 下载安装2. 功能介绍2.1 欢迎界面2.2 工具栏2.3 小地图2.4 流程配置2.5 小工具栏2.6 启动…...
呼叫中心系统管理和优化的关键指标
呼叫中心系统是企业客户服务的重要组成部分,通过电话、邮件、社交媒体等渠道与客户进行沟通和交互。如何管理和优化呼叫中心系统,提高客户满意度和工作效率,是每个企业都需要关注和解决的问题。以下是呼叫中心系统管理和优化的关键指标。 1. …...
UML箭头汇总
参考:http://www.cnblogs.com/damsoft/archive/2016/10/24/5993602.html 1.UML简介 Unified Modeling Language (UML)又称统一建模语言或标准建模语言。 简单说就是以图形方式表现模型,根据不同模型进行分类,在UML 2.0中有13种图ÿ…...
【STM32零基础入门教程03】GPIO输入输出之GPIO框图分析
本章节主要讲解点亮LED的基本原理,以及GPIO框图的讲解。 如何点亮LED(输出) 首先我们查看原理图,观察电路图中LED的连接情况,如下图可以看出我们的板子中LED一端通过限流电阻连接的PB0另一端连接的是高电平VCC…...
高效管理,PDM系统与BOM系统携手合作
在现代制造业中,PDM系统(Product Data Management,产品数据管理)和BOM系统(Bill of Materials,物料清单管理)都扮演着关键的角色。PDM系统负责产品数据的统一管理,而BOM系统则专注于…...
Elasticsearch 使用scroll滚动技术实现大数据量搜索、深度分页问题 和 search
基于scroll滚动技术实现大数据量搜索 如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scroll滚动查询,一批一批的查,直到所有数据都查询完为止。 scroll搜索会在第一次搜索的时候,保存一个当时的视…...
了解Swarm 集群管理
Swarm 集群管理 简介 Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。 支持的工具包括但不限…...
【Docker】Docker私有仓库的使用
目录 一、搭建私有仓库 二、上传镜像到私有仓库 三、从私有仓库拉取镜像 一、搭建私有仓库 首先我们需要拉取仓库的镜像 docker pull registry 然后创建私有仓库容器 docker run -it --namereg -p 5000:5000 registry 这个时候我们可以打开浏览器访问5000端口看是否成功&…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
