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

Java抽象工厂+单例模式

在前端时间开发过程中,有这样一个业务场景:A;B两家厂商设备进行设备信息的同步功能。

根据实际场景,做了抽象工厂+单例模式实现调用工厂时,生成不同的具体业务引用对象,实现方法的调用。

概念:
抽象工厂模式通过接口或抽象类来创建一系列相关或依赖对象。它定义了一组工厂方法,每个方法对应一种产品类型。具体工厂实现了这些接口,负责创建具体的产品对象。客户端通过抽象工厂接口来调用这些方法,从而创建一系列相关或依赖的对象。

结构
抽象工厂模式包含以下几个主要角色:
‌抽象工厂(Abstract Factory)‌:定义了一组工厂方法来创建一系列相关或依赖对象的抽象接口。
‌具体工厂(Concrete Factory)‌:实现了抽象工厂接口,负责创建具体的产品对象。
‌抽象产品(Abstract Product)‌:定义了一组产品对象的共同接口或抽象类。
‌具体产品(Concrete Product)‌:实现了抽象产品接口,定义了具体产品的行为和属性。
‌客户端(Client)‌:使用抽象工厂和抽象产品接口来调用具体工厂创建产品对象的方法。

优点和缺点
‌优点‌:
‌ 一致性‌:确保同一产品族的对象一起工作,客户端不需要知道每个对象的具体类,简化了代码。
‌ 解耦‌:将客户端与具体产品的创建过程解耦,使得系统更加灵活。
‌缺点‌:
‌ 扩展困难‌:增加新的产品族需要修改抽象工厂和所有具体工厂的代码,扩展较为复杂。
‌ 维护成本‌:当需要增加新的产品等级结构时,可能会增加维护成本。

其实实际开发呢,我们前期往往不需要抽象工厂,直接一个具体工厂就可以了

首先我们定义一个接口,这个接口只负责声明方法,具体由谁去实现,实现什么样的业务则根据实际

情况定义。

比如:我们声明一个创建设备的方法,但是具体由谁去创建设备,以及创建A厂商还是B厂商的设备,

则由实现类去处理。


public interface IDeviceService {/*** 创建设备* @param deviceConfig* @return*/int createDevice(DeviceConfig deviceConfig);
}

我们声明A业务类,在这里实现创建A类型设备

@Service
public class ADeviceServiceImpl implements IDeviceService {private static Logger logger= LoggerFactory.getLogger(ADeviceServiceImpl.class);private final DeviceConfig deviceConfig;public ADeviceServiceImpl (DeviceConfig deviceConfig) {try {this.deviceConfig = deviceConfig;} catch (Exception e) {throw new RuntimeException(e)

相关文章:

Java抽象工厂+单例模式

在前端时间开发过程中,有这样一个业务场景:A;B两家厂商设备进行设备信息的同步功能。 根据实际场景,做了抽象工厂+单例模式实现调用工厂时,生成不同的具体业务引用对象,实现方法的调用。 概念: 抽象工厂模式通过接口或抽象类来创建一系列相关或依赖对象。它定义了一组工…...

后端接口设计

一、基本规范 1.URL设计 应遵循RESTful风格,使用动词名词的方式描述接口的功能。应简洁明了,易于理解和记忆。 2.请求协议及方法 使用HTTPS协议进行数据传输,保证数据在传输过程中的安全性。如无特殊情况,统一使用post方法。 …...

Docker部署Sentinel

一、简介 是什么:面向分布式、多语言异构化服务架构的流量治理组件 能干嘛:从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性 官网地址:https://sentinelguard.io/zh-c…...

真实环境下实车运行,新能源汽车锂离子电池数据集

引言 锂离子电池(Lithium-ion Batteries,LiBs)已经作为电动汽车核心动力源,其性能直接关系到系统的性能和使用安全。为确保锂电池的安全使用,需要对锂电池的状态进行精确的估计,包括荷电状态(State of Charge, soC)、健康状态(St…...

【求职面试】驾照的种类

大型客车 A1 大型载客汽车 A3、B1、B2、C1、C2、C3、C4、M 牵引车 A2 重型、中型全挂、半挂汽车列车 B1、B2、C1、C2、C3、C4、M 城市公交车 A3 核载10人以上的城市公共汽车 C1、C2、C3、C4 中型客车 B1 中型载客汽车(10人以上、19人以下) C1、C2、C3…...

centos权限大集合,覆盖多种权限类型,解惑权限后有“. + t s”问题!

在 CentOS 系统中,权限管理是操作系统的核心功能之一,确保不同用户和进程对文件、目录以及设备的访问被合理控制。 权限系统主要包括传统的 Unix 权限模型、特殊权限(SetUID、SetGID、Sticky 位)和更精细的访问控制列表&#xff…...

AI Agent案例全解析:百度营销智能体(8/30)

引言:在当今这个科技飞速发展的时代,AI技术呈现出爆发式的增长,正以前所未有的态势改变着众多行业的发展轨迹,营销领域也不例外。随着市场竞争的日益激烈,传统营销模式逐渐显露出疲态,对于变革的需求愈发迫…...

hive常用函数有哪些

Hive是一个基于Hadoop的数据仓库工具,它提供了类似于SQL的接口,用于数据查询和分析。Hive提供了许多内置函数,这些函数可以分为几种类型,包括: • 字符串函数:用于处理字符串数据。 • concat()&#xff1…...

【Python高级353】python实现多线程版本的TCP服务器

前面学了了套接字编程、tcp服务端客户端开发、面向对象版的服务端客户端、带有端口复用的服务端。 这里使用多线程开发多任务版的服务端 多任务版本的TCP服务器 来一个客户,就为其创建一个线程 import socket import threadingclass WebServer:# 3、定义一个__ini…...

分布式调度框架学习笔记

一、分布式调度框架的基本设计 二、线程池线程数量设置的基本逻辑 cpu是分时复用的方法,线程是cpu调度的最小单元 如果当前cpu核数是n,计算密集型线程数一般设为n,io密集型(包括磁盘io和网络io)线程数一般设置为2n. 计算密集型线程数一般设…...

SpringCloudAlibaba技术栈-Nacos

1、什么是Nacos? Nacos是个服务中心,就是你项目每个功能模块都会有个名字,比如支付模块,我们先给这个模块起个名字就叫paymentService,然后将这个名字和这个模块的配置放到Nacos中,其他模块也是这样的。好处是这样能更好地管理项…...

Redis篇--常见问题篇4--大Key(Big Key,什么是大Key,影响及使用建议)

1、概述 大Key:通常是指值(Value)的长度非常大,实际上键(Key)长度很大也算。通常来说,键本身不会很长,占用的内存较少,因此判断一个键是否为bigKey主要看它对应的值的大…...

谷歌浏览器 Chrome 提示:此扩展程序可能很快将不再受支持

问题现象 在Chrome 高版本上的扩展管理页面(地址栏输入chrome://extensions/或者从界面进入): , 可以查看到扩展的情况。 问题现象大致如图: 问题原因 出现此问题的根本原因在于:谷歌浏览器本身的扩展机制发生了…...

WebRTC服务质量(10)- Pacer机制(02) RoundRobinPacketQueue

WebRTC服务质量(01)- Qos概述 WebRTC服务质量(02)- RTP协议 WebRTC服务质量(03)- RTCP协议 WebRTC服务质量(04)- 重传机制(01) RTX NACK概述 WebRTC服务质量(…...

数据库的数据被清除了,该如何恢复?

当数据库的数据被清除时,恢复数据的难度和可能性取决于多种因素,包括数据清除的方式、数据库的类型、是否有备份等。以下是一些常见的数据库数据恢复方法: 一、基于备份的恢复 使用备份文件: 如果数据库有定期的备份&#xff0c…...

【西安电子科技大学考研】25官方复试专业课参考书目汇总

初试已经顺利考完啦、成绩已经公布,现在已经有很多同学来问学长学姐,复试参考书有哪些,复试应该做好哪些准备。故此学长学姐给大家整理好了西安电子科技大学各个学院的复试参考书目录,有需要的同学可以参考一下哈。大家可以结合本…...

【理解机器学习中的过拟合与欠拟合】

在机器学习中,模型的表现很大程度上取决于我们如何平衡“过拟合”和“欠拟合”。本文通过理论介绍和代码演示,详细解析过拟合与欠拟合现象,并提出应对策略。主要内容如下: 什么是过拟合和欠拟合? 如何防止过拟合和欠拟…...

fastjson诡异报错

1、环境以及报错描述 1.1 环境 操作系统为中标麒麟、cpu 为国产鲲鹏服务器。 jdk为openjdk version 1.8.0._242 1.2 错误 com.alibaba.fastjson2.JSONException: syntax error : f at com.alibaba.fastjson2.JSONReaderUTF16.readBoolValue(JSONReaderUTF16.java:6424) at c…...

面经zhenyq

如何去实现分层的动画效果? 在Unity中实现分层的动画效果,可以通过Animator的 Layer 功能实现。以下是详细步骤: 1. 什么是分层动画? 分层动画允许在同一个角色的不同部分同时播放独立的动画。例如: 上半身可以播放…...

GoFrame框架介绍

GoFrame是一款功能强大、设计精良且易用的Go语言开发框架,以下为你详细介绍它的相关特点和内容: ### 框架概述 GoFrame是为了提升Go语言开发者的编码效率以及项目的整体可维护性、可扩展性等而打造的开发框架,它涵盖了从基础的网络通信、数据…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Cursor实现用excel数据填充word模版的方法

cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...