Spring策略模式的实现
场景:
有时候一个业务方法有多个实现类,需要根据特定的情形进行业务处理。
例如:商店支付,我们可以使用支付宝、微信扫描农行、xxx行的快捷支付(而不是微信支付、支付宝支付二维码)购买商品。
实现代码(代码和以上不相干,工作中实际使用的代码,供参考):
public interface ConvertService{
/***
* 转换
* @param request
* @return
*/
ConversionResponse convert(ConversionRequest request);
}
@Slf4j
@Component("streamConveter")
public class StreamConverter implements ConvertService {
... convert(ConversionRequest request)
{}
}
@Slf4j
@Component("ttsConverter")
public class TTSConverter extends WebSocketClient implements ConvertService{ public ConversionResponse convert(ConversionRequest request){
}
}
class XXXImpl
{
@Autowired
StreamConverter streamConverter; @Autowired
TTSConverter wsConverter; @Autowired
CacheService cacheService; private static ConversionResponse DefaultResponse = new ConversionResponse
.Builder()
.responseMessage("不支持该转换!")
.responseCode(ResultCodes.ERROR)
.uuid(null)
.build(); public ConvertService doStrategy(ConversionMode mode) { ConvertService converter = null; switch (mode)
{
case TTS:
converter = wsConverter;
break;
case ASR:
converter = streamConverter;
break;
case Merge:
} return converter;
} public void xxx()
{
ConversionMode mode = request.getMode(); ConvertService converter = doStrategy(mode); if(Objects.isNull(converter))
{
return DefaultResponse;
} ConversionResponse response = converter.convert(request);
if(response.getResponseCode() == ResultCodes.SUCCESS)
{
//如果执行成功,更新缓存
String hash = computeHash(request);
String uuid = response.getUuid();
getCacheService().setCacheMap(CacheService.MEDIA_META,Collections.singletonMap(uuid,hash));
}
return response;
}
}
Spring策略模式的实现的更多相关文章
- Spring设计模式_策略模式/其他
策略模式特性 1.执行最终结果一样 2.执行过程和执行逻辑不一样 3.使用同一接口 达到目的就可以了 Git地址 https://github.com/wujiachengSH/WjcStrategy ...
- 设计模式_策略模式_在Spring中的应用
一.理论 在spring中经常有读取配置文件的需求,这里就会用到一个Spring提供的Resource接口 Resource 接口是具体资源访问策略的抽象,也是所有资源访问类所实现的接口.Resour ...
- 在商城系统中使用设计模式----策略模式之在spring中使用策略模式
1.前言: 这是策略模式在spring中的使用,对策略模式不了解对同学可以移步在商城中简单对使用策略模式. 2.问题: 在策略模式中,我们创建表示各种策略的对象和一个行为,随着策略对象改变而改变的 c ...
- 【Spring源码解析】—— 策略模式在Spring中的应用
一. 什么是策略模式 策略模式的定义/含义:策略本身就是为了实现某一个目标而采取的一种工作方式,因此只要能够达成目标,则采取哪一种策略都可以:因此多种实际的策略之间是相互平行的. 注意 ...
- 如何在Spring Boot项目中巧妙利用策略模式干掉if else!
直入主题 我们都知道,设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路.它不是语法规定,而是一套用来提高代码可复用性.可维护性.可读性.稳健性以及安全性 ...
- 结合Spring实现策略模式
最近系统需要对不同维度的数据进行差异化计算,也就会使用不同算法.为了以后更加容易扩展,结合Spring框架及策略模式对实现架构做了系统设计. 1. 定义策略接口(Strategy): import c ...
- Spring中常见的设计模式——策略模式
策略模式(Strategy Pattern) 一.策略模式的应用场景 策略模式的应用场景如下: 系统中有很多类,而他们的区别仅仅在于行为不同. 一个系统需要动态的在集中算法中选择一种 二.用策略模式实 ...
- 策略模式、策略模式与Spring的碰撞
策略模式是GoF23种设计模式中比较简单的了,也是常用的设计模式之一,今天我们就来看看策略模式. 实际案例 我工作第三年的时候,重构旅游路线的机票查询模块,旅游路线分为四种情况: 如果A地-B地往返都 ...
- 【策略模式】策略模式结合Spring实战Demo
策略模式 策略模式用于解决判断分支过多的问题,使代码变得简洁和优雅, 策略模式在多种方式在项目中落地,下面举例说明通过指定不同类型的订单使用策略模式执行不同的业务逻辑 文章参考自公众号:石杉的架构笔记 ...
随机推荐
- meta 中的属性viewport
粘贴自:https://blog.csdn.net/u012402190/article/details/70172371 <meta name="viewport" con ...
- LoadRunner(2)
一.性能测试的基本概念 1.并发和在线的区别:并发的压力是一种瞬时压力,一般针对同一类型业务:在线的压力是一段时间的压力,没有并发那么集中. 规律:一般20用户并发产生的压力相当于200用户在线的压力 ...
- 2018 牛客网暑期ACM多校训练营(第一场) E Removal (DP)
Removal 链接:https://ac.nowcoder.com/acm/contest/139/E来源:牛客网 题目描述 Bobo has a sequence of integers s1, ...
- Springboot静态资源映射 “/” 引发的血案
因为少写一个 / 浪费已个下午的时间,
- 以组件的方式,添加redis_cache
settings.py中文件内设置如下: CACHES = { 'default':{ 'BACKEND':'django_redis.cache.RedisCache', 'LOCATION':'r ...
- [暂停维护]基于8211lib库对s57电子海图的解析和存储
此篇博文停止维护,欢迎移步最新地址(含源代码),https://www.yanlongwang.net/USV/ENC-analysis-store.md/, 查看最新文章. 电子海图是为适用航海需要 ...
- 计数dp做题笔记
YCJS 3924 饼干 Description 给定一个长度为\(n\)的序列,序列每个元素的取值为\([1,x]\),现在给定\(q\)个区间,求在所有取值方案中,区间最小值的最大值的期望是多少? ...
- Java中的集合Queue、LinkedList、PriorityQueue(四)
Queue接口 Queue用于模拟了队列这种数据结构,队列通常是指“先进先出”(FIFO)的容器.队列的头部保存在队列中时间最长的元素,队列的尾部保存在队列中时间最短的元素.新元素插入(offer)到 ...
- 组合模式(Composite)---结构型
1 基础知识 定义:将对象组合成树形结构以表示“部分-整体”的层次结构.特征:组合模式使得客户端对单个对象和组合对象保持一致的方式处理. 本质:统一叶子对象和组合对象. 目的:让客户端不再区分操作的是 ...
- 自动上传本地图片和word图片(word图片需使用从word粘贴功能)
在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper. 通过知乎提供的思路找到粘贴的原理,通过TheViper找 ...