Java抽象工厂+单例模式

news/2024/12/28 3:59:29/

在前端时间开发过程中,有这样一个业务场景: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.ppmy.cn/news/1558686.html

相关文章

武汉火影数字3D光影秀打造 “光+影+文化+故事+演艺“完美融合

3D光影秀打造利用虚拟现实技术、裸眼3D动画技术,创造出一种立体视觉效果,实现物体与动画的完美融合,产生强烈的视觉冲击力。 作为一种独特的艺术形式,光影秀能够打破传统艺术形式的界限,提供全新的视觉体验&#xff0c…

无需公网 IP 实现外部访问 Puter 一站式云平台

Puter 是一款隐私至上的个人云,它是开源桌面环境,运行在浏览器中,这款桌面环境具备丰富的功能、异常快速和高度可扩展性。它可以用于构建远程桌面环境,也可以作为云存储服务、远程服务器、Web 托管平台等的界面。 第一步&#xf…

<代码随想录> 算法训练营-2024.12.23

今日专题 动态规划 股票买卖 今日总结:动态规划得好好想一想需要什么状态,状态其实是用来描述子问题的 121. 买卖股票的最佳时机 解法一:动态规划 class Solution:def maxProfit(self, prices: List[int]) -> int:#dp[i][j] 表示当前拥…

华为云语音交互SIS的使用案例(文字转语音-详细教程)

文章目录 题记一 、语音交互服务(Speech Interaction Service,简称SIS)二、功能介绍1、实时语音识别2、一句话识别3、录音文件识别4、语音合成 三、约束与限制四、使用1、API2、SDK 五、项目集成1、引入pom依赖2、初始化 Client1)…

Grok 2.0:马斯克的大模型挑战ChatGPT,AI竞争再升级

引言:马斯克Grok 2.0的横空出世 在人工智能(AI)领域,竞争从未停止。随着大型语言模型(LLM)的快速发展,各大科技巨头纷纷推出自己的AI模型,试图在激烈的竞争中占据领先地位。最近&am…

shell学习简介(一)

这里写目录标题 一、Shell简介二、Shell脚本注意事项三、入门脚本 一、Shell简介 Shell 脚本是一种用于自动化任务的脚本语言,通常在 Unix/Linux 系统中使用。通过结合条件判断和循环来实现命令的自动运行以完成一些相对固定的操作。 简单说:Shell就是一…

golang 指针demo

我根据实战经验总结了以下几点使用指针的建议,供你参考: 不要对 map、slice、channel 这类引用类型使用指针; 如果需要修改方法接收者内部的数据或者状态时,需要使用指针; 如果需要修改参数的值或者内部数据时&#x…

云开发 Copilot:AI 赋能的低代码革命

云开发 Copilot:AI 赋能的低代码革命 目录: 一、引言:AI 时代的开发新纪元 1.1 低代码与AI的完美融合1.2 云开发 Copilot的革命性意义 二、云开发 Copilot 的核心特性解析 2.1 快速生成应用功能2.2 低代码与AI的深度结合 三、实战演练&…