当前位置: 首页 > 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)
http://www.lryc.cn/news/509957.html

相关文章:

  • 后端接口设计
  • Docker部署Sentinel
  • 真实环境下实车运行,新能源汽车锂离子电池数据集
  • 【求职面试】驾照的种类
  • centos权限大集合,覆盖多种权限类型,解惑权限后有“. + t s”问题!
  • AI Agent案例全解析:百度营销智能体(8/30)
  • hive常用函数有哪些
  • 【Python高级353】python实现多线程版本的TCP服务器
  • 分布式调度框架学习笔记
  • SpringCloudAlibaba技术栈-Nacos
  • Redis篇--常见问题篇4--大Key(Big Key,什么是大Key,影响及使用建议)
  • 谷歌浏览器 Chrome 提示:此扩展程序可能很快将不再受支持
  • WebRTC服务质量(10)- Pacer机制(02) RoundRobinPacketQueue
  • 数据库的数据被清除了,该如何恢复?
  • 【西安电子科技大学考研】25官方复试专业课参考书目汇总
  • 【理解机器学习中的过拟合与欠拟合】
  • fastjson诡异报错
  • 面经zhenyq
  • GoFrame框架介绍
  • MapReduce工作流程+Shuffle机制
  • JAVA8 Stream API 使用详解
  • Redis 集群架构:高可用与扩展性
  • Redis数据对象
  • Docker部署GitLab服务器
  • python版本的Selenium的下载及chrome环境搭建和简单使用
  • 重温设计模式--4、组合模式
  • 5、mysql的读写分离
  • uniapp Native.js原生arr插件服务发送广播到uniapp页面中
  • 如何在 Ubuntu 22.04 上安装 Elasticsearch
  • 单片机长耗时前后台任务优化