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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/890806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring专题笔记(六):bean的自动装配(自动化注入)-根据名字进行自动装配、根据类型进行自动装配。代码演示,通俗易懂。

目录 一、根据名字进行自动装配--byName 二、根据类型进行自动装配 byType 本文章主要是介绍spring的自动装配机制, 用代码演示spring如何根据名字进行自动装配、如何根据类型进行自动装配。代码演示,通俗易懂。 一、根据名字进行自动装配--byName Us…

petalinux 中 cmake 需要用到的环境变量

自定义修改部分环境变量, 实测可用

搭建ORB-SLAM3编译环境

Pangolin git clone https://gitclone.com/github.com/stevenlovegrove/Pangolin sudo apt-get install libxkbcommon-dev sudo apt-get install wayland-protocols sudo apt install libglew-dev cd Pangolin mkdir build cd build cmake … make -j sudo make install 2、安…

opencv中的各种滤波器简介

在 OpenCV 中,滤波器是图像处理中的重要工具,用于对图像进行平滑、去噪、边缘检测等操作。以下是几种常见滤波器的简单介绍。 1. 均值滤波 (Mean Filter) 功能: 对图像进行平滑处理,减少噪声。 应用场景: 去除图像…

深入解析MySQL索引结构:从数组到B+树的演变与优化

前言: 在数据库查询中,索引是一种关键的性能优化工具。然而,索引的失效可能导致查询效率大幅下降。为了更好地理解索引的工作原理及规避其失效,深入了解索引结构的演变过程尤为重要。 MySQL 的索引数据结构从简单到复杂&#xff0…

43. Three.js案例-绘制100个立方体

43. Three.js案例-绘制100个立方体 实现效果 知识点 WebGLRenderer(WebGL渲染器) WebGLRenderer是Three.js中最常用的渲染器之一,用于将3D场景渲染到网页上。 构造器 WebGLRenderer(parameters : Object) 参数类型描述parametersObject…

【Java】Jackson反序列化示例

上篇文章【Java】Jackson序列化案例分析:https://blog.csdn.net/AwesomeP/article/details/144726180 需求 将如下Json字符串映射在Java对象中。 { “name”: “John Doe”, “phone”: “1234567890”, “age”: 30, “birthday”: “2000-01-01 12:00:00”, “cr…

关于studywolf_control动态运动原语

链接: ​​​​​Dynamic movement primitive | studywolf GitHub - studywolf/control: A repository for control benchmarking code GitHub - studywolf/pydmps 以下内容讲解这个指令下的逻辑:python3 run.py arm3 dmp write 目录 (一) run.py…

@RequestParam和@PathVariable的解释与区别

在 Spring 框架中,RequestParam和PathVariable都是用于从 HTTP 请求中获取参数的注解,但它们的使用场景和获取参数的方式有所不同。 1. RequestParam 解释:RequestParam主要用于从 HTTP 请求的查询参数(也就是 URL 中?后面的键值…

Python vs PHP:哪种语言更适合网页抓取

本文将比较 Python 和 PHP,以帮助读者确定哪种语言更适合他们的需求。文章将探讨两种语言的优点和缺点,并根据读者的经验水平分析哪种语言可能更容易上手。接下来,文章将深入探讨哪种语言在抓取网页数据方面更胜一筹。 简而言之,…

c# 实现一个简单的异常日志记录(异常迭代+分片+定时清理)+AOP Rougamo全局注入

1. 日志目录和文件管理 日志目录:日志文件存储在 ./Exceptions 目录下。日志文件命名:日志文件的命名格式为 yyyy_MM_dd.log,表示当天的日期。如果当天的日志文件大小超过 maxFileSizeBytes(3KB),则会创建…

python+reportlab创建PDF文件

目录 字体导入 画布写入 创建画布对象 写入文本内容 写入图片内容 新增页 画线 表格 保存 模板写入 创建模板对象 段落及样式 表格及样式 画框 图片 页眉页脚 添加图形 构建pdf文件 reportlab库支持创建包含文本、图像、图形和表格的复杂PDF文档。 安装&…

打造两轮差速机器人fishbot:从零开始构建移动机器人

大家好,我是梦笔生花,我们一起来动手创建一个两轮差速的移动机器人fishbot。 机器人除了雷达之外,还需要IMU加速度传感器以及可以驱动的轮子,我们曾介绍过机器人学部分,曾对两差速模型进行过介绍,所以我们…

Python函数(十二):函数的创建和调用、参数传递、返回值

前言:在编程的世界里,函数是一种基本的构建块,它允许我们将代码封装成可重复使用的单元。在Python中,函数的使用尤为重要,因为它不仅有助于代码的模块化,还提高了代码的可读性和可维护性。本章节&#xff0…

网络安全攻防演练中的常见计策

大家觉得有意义记得关注和点赞!!! 引言 在网络安全攻防演练里面,用于分析攻击者动机和行为的,国外的有基于攻击链分析的模型(如Cyber Kill Chain和ATT&CK)和基于威胁行为的模型&#xff08…

UE5 崩溃问题汇总!!!

Using bundled DotNet SDK version: 6.0.302 ERROR: UnrealBuildTool.dll not found in "..\..\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.dll" 在你遇到这种极奇崩溃的BUG ,难以解决的时候。 尝试了N种方法,都不行的解决方法。…

2024国赛A问题三和四

问题三 最小螺距单目标优化模型的建立 问题二考虑了在螺距固定的条件下计算舞龙队盘入的终止时间,问题三在第二问的基础提出了改变螺距的要求,即求解在螺距最小为多少时,龙头前把手能够沿着相应的螺线盘入到调头空间的边界。故可将其转换为…

nginx Rewrite 相关功能

一、Nginx Rewrite 概述 定义 Nginx 的 Rewrite 模块允许对请求的 URI 进行重写操作。它可以基于一定的规则修改请求的 URL 路径,然后将请求定向到新的 URL 地址,这在很多场景下都非常有用,比如实现 URL 美化、网站重构后的 URL 跳转等。主要…

GA-Kmeans-Transformer时序聚类+状态识别组合模型

创新研究亮点!GA-Kmeans-Transformer时序聚类状态识别组合模型 目录 创新研究亮点!GA-Kmeans-Transformer时序聚类状态识别组合模型效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.创新研究亮点!GA-Kmeans-Transformer时序聚类状态识…

最新的强大的文生视频模型Pyramid Flow 论文阅读及复现

《PYRAMIDAL FLOW MATCHING FOR EFFICIENT VIDEO GENERATIVE MODELING》 论文地址:2410.05954https://arxiv.org/pdf/2410.05954 项目地址: jy0205/Pyramid-Flow: 用于高效视频生成建模的金字塔流匹配代码https://github.com/jy0205/Pyram…