工厂模式+策略模式

news2024/11/23 22:52:50

UML:

 class:

public interface IDeliveryService {

    /**
     * 创建第三方出货单
     * @param obj 入参
     */
    Object createThirdOrder(Object obj);
}
@Service
@RequiredArgsConstructor
public class DeliveryServiceImpl implements IDeliveryService {

    private final DeliveryStrategyFactory deliveryStrategyFactory;

    @Override
    public Object createThirdOrder(Object obj){
        // 根据type确定出库策略
        IDeliveryStrategy deliveryStrategy = deliveryStrategyFactory.getDeliveryStrategy(DeliveryPlatformEnum.MO_FANG);
        // 创建
        return deliveryStrategy.create((MoFangCreateOrderDTO )deliveryOrderDTO);
    }
}
@Component
public class DeliveryStrategyFactory implements ApplicationContextAware {

    private Map<DeliveryPlatformEnum,IDeliveryStrategy> deliveryStrategyMap = new HashMap<>();

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        Map<String, IDeliveryStrategy> beansOfType = applicationContext.getBeansOfType(IDeliveryStrategy.class);
        beansOfType.values().forEach(e-> deliveryStrategyMap.put(e.getDeliveryPlatformEnum(),e));
    }

    public IDeliveryStrategy getDeliveryStrategy(DeliveryPlatformEnum deliveryPlatformEnum){
        return deliveryStrategyMap.get(deliveryPlatformEnum);
    }
}
@Getter
public enum DeliveryPlatformEnum {
    /**
     * 魔方平台
     */
    MO_FANG(1,"魔方");

    private final Integer code;

    private final String description;

    DeliveryPlatformEnum(Integer code,String description) {
        this.code = code;
        this.description = description;
    }
}
public interface IDeliveryStrategy {
    /**
     * 策略所属平台枚举
     * @return 。
     */
    DeliveryPlatformEnum getDeliveryPlatformEnum();
    /**
     * 创建出货单
     * @param
     * @return
     */
    Object create(Object obj);
}
@Service
@RequiredArgsConstructor
public class MoFangDeliveryStrategy implements IDeliveryStrategy {

    private final MoFangClient moFangClient;

    @Override
    public DeliveryPlatformEnum getDeliveryPlatformEnum() {
        return DeliveryPlatformEnum.MO_FANG;
    }

    @Override
    public Object create(Object obj){
        return JsonUtils.toObject(moFangClient.createOrder((MoFangCreateOrderDTO) obj), MoFangCreateOrderResponse.class);
    }


}

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

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

相关文章

超声医疗高压功率放大器ATA-4315技术参数

超声波检查或超声诊断&#xff0c;是一种非侵入性的医学检查方法&#xff0c;它利用了声波的高频振动来观察和评估人体内部的器官和组织。它基于不同密度和组织结构中传播的原理。通过将ultrasound(超声波)传递到身体的特定区域&#xff0c;并记录反射回来的声波&#xff0c;我…

reggie优化05-前后端分离开发

1、YApi 2、Swagger 2.1 操作步骤 1、导入Maven <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2</version></dependency>2、导入Knife4j相关配置&a…

Java读取Excel 单元格包含换行问题

Java读取Excel 单元格包含换行问题 需求解决方案 需求 针对用户上传的Excel数据&#xff0c;或者本地读取的Excel数据。单元格中包含了换行&#xff0c;导致读取的数据被进行了切片。 正常读取如下图所示。 解决方案 目前是把数据读取出来的cell转成字符串后&#xff0c;…

点大商城V2_2.5.0 全开源版 商家自营+多商户入驻 百度+支付宝+QQ+头条+小程序端+unipp开源前端安装测试教程

播播资源安装点大商城V2_2.5.0 全开源版测试后发现后台总体体验下来比较简洁&#xff0c;营销功能还是挺多该有的都有了&#xff0c;相比上一版优化很多细节。首页和会员中心均支持DIY装修&#xff0c;底部菜单也一样&#xff0c;安装测试中目前未发现BUG&#xff0c;小程序整体…

在 Amazon 上以高可用性模式实现 Microsoft SQL 数据库服务现代化的注意事项

许多企业都有需要 Microsoft SQL Server 来运行关系数据库工作负载的应用程序&#xff1a;一些应用程序可能是专有软件&#xff0c;供应商可使用它强制 Microsoft SQL Server 运行数据库服务&#xff1b;其他应用程序可能是长期存在的、自主开发的应用程序&#xff0c;它们在最…

Echarts 实现温度计

先上图 <div id="mainOne" style="width: 230px;height:130px;"></div> var dom1 = document.getElementById(mainOne) 核心代码 setTemperature(){var dom1 = document.getElementById(mainOne)var dom2 = document.getElementById(mainTw…

mybatis 基础2

查询所有 数据库字段与JavaBean属性保持一致 数据库字段与JavaBean属性不一致 使用resultMap标签 多表查询 association【引入JavaBean实体类】 通过tprice&#xff0c;address_name模糊查询

软件渗透测试真的很重要吗?渗透测试有哪些测试流程?

软件渗透测试是指通过模拟恶意攻击者的行为&#xff0c;评估软件系统中的潜在安全漏洞和弱点的活动。这种安全测试方法能够帮助开发人员和系统管理员发现并修复潜在的安全漏洞&#xff0c;以确保软件系统的安全性和完整性。软件渗透测试是一项高度技术性的任务&#xff0c;需要…

matplotlib从起点出发(1)_Tutorial_1

0 系列简介 这个系列&#xff0c;小白从起点出发开始整理matplotlib库的基本使用及相关技巧。小白的主要思路是沿着官网的tutorials先学习matplotlib的基础功能&#xff0c;然后针对官网总结的Cheat Sheets及其中的知识点查漏补缺。作为一个工具库&#xff0c;小白认为只要能够…

【SCI一区】【电动车】基于ADMM双层凸优化的燃料电池混合动力汽车研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 1.2 电动车动力学方程 1.3 电池模型 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码、数据、文章讲解 &#x1f4a5;1 概述 文献来源&#xff1a; 随着车辆互联性的出现&#xff0c;互联汽车 (CVs) 在增强道路安全、改…

分享5款非常实用而且很有特色的软件

​ 今天我要分享5款非常实用&#xff0c;并且很有特色的软件&#xff0c;这些都是可以在网上免费下载使用的&#xff0c;让大家工作和生活更便捷。 媒体播放器——Kodi ​ Kodi是一个媒体播放器&#xff0c;可以让你播放和管理你的本地或在线媒体库&#xff0c;如视频、音频、…

Fuzz学习笔记(二)—— TrapFuzzer环境搭建

Fuzz学习笔记&#xff08;二&#xff09;—— TrapFuzzer环境搭建 TrapFuzzer介绍基本用法1. 插桩2. 配置config.json3. 调试4. Fuzz 编译TrapFuzzer-gdbLinux下载源码安装依赖项编译常见问题relocation R_X86_64_32 against hidden symbol __TMC_END__ can not be used when m…

金融中的数学:概率分布(下)

上篇博客介绍了离散型概率分布&#xff0c;本篇博客介绍连续型概率分布。 1.连续型概率分布 连续型均匀分布&#xff08;Continuous Uniform distribution&#xff09;是一种描述在特定区间内取值均匀分布的概率分布。在该分布中&#xff0c;随机变量在给定区间内的取值概率密…

【RISC-V】昉·星光 2单板计算机初始调试记录

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

数据结构单向循环链表,创建以及增删改查的实现

一、单向循环链表的描述 循环链表&#xff1a;是另一种形式的链式存储结构。其特点是表中最后一个结点的指针域指向头节点&#xff0c;整个链表形成一个环。 单向循环链表的操作和单链表操作基本一致&#xff0c;差别在于&#xff1a;当链表遍历时&#xff0c;判别当前指针p是…

数据分析的iloc和loc功能

大家好&#xff0c;在处理大型数据集时&#xff0c;使用有效的数据操作和提取技术是必要的。Pandas数据分析库提供了强大的工具&#xff0c;用于处理结构化数据&#xff0c;包括使用iloc和loc函数访问和修改DataFrame元素的能力。在本文中&#xff0c;我们将探讨iloc和loc之间的…

硬件设计 之 M.2接口常用知识

M.2接口 也被称为NGFF&#xff08;Next Generation Form Factor&#xff09;&#xff0c;是一种用于固态硬盘&#xff08;SSD&#xff09;和无线网络适配器等设备的高速接口标准。它是一种小型、高密度、高速度的接口&#xff0c;可用于替代传统的SATA接口和PCI Express Mini卡…

.NET网络编程——TCP通信

一、网络编程的基本概念 : 1. 网络 就是将不同区域的电脑连接到一起&#xff0c;组成局域网、城域网或广域网。把分部在不同地理区域的计算机于专门的外部设备用通信线路 互联成一个规模大、功能强的网络系统&#xff0c;从而使众多的计算机可以方便地互相传递信息&#xff0c…

gd32f103vbt6 串口OTA升级5-combin部分

一. 简介 本文主要是bin文件的组成进行一些简单介绍&#xff0c;方便理解升级的过程。 二.硬件部分 2.1 rk3399cpugd32f103 2.2 连接方式&#xff1a;串口&#xff08;115200&#xff0c;8N1&#xff09;或者iic&#xff08;本文没有介绍iic&#xff09; 三、其他需要说明的软…

销售自动化如何提高团队生产力?从这5个方面发力

任何用于减少人工劳动和缩短销售流程相关任务时间的技术&#xff0c;都可定义为销售自动化。 对于忙碌的销售人员来说&#xff0c;流程自动化是真正的救星。它可以使他们的工作简化30%&#xff0c;让他们更专注于创收任务。这将显著提高团队的工作效率&#xff0c;并带来许多其…