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;
  }
}

 

转载于:https://www.cnblogs.com/passedbylove/p/11422694.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值