第一种:策略模式工厂类的实现

IncomingStrategyFactory工厂类
学习点:
1、<? extends A>这里的限定使用关键字extends,后面可以是类也可以是接口。但这里的extends已经不是继承的含义了,应该理解为T类型是实现A接口的类型,或者T是继承了XX类的类型。
2、IncomingPushService可以看作为一个父类的service,然后根据传进的code的不同,getBean出两个子类XingBangIncomingService和GuoJinIncomingService,达到策略选择的模式。

@Component
public class IncomingStrategyFactory {@Autowiredprivate ApplicationContext context;private static Map<String, Class<? extends IncomingPushService>> incomingStrategyMap = new HashMap<>();static {incomingStrategyMap.put(InstitutionsEnum.XINGBANG.getCode(), XingBangIncomingService.class);incomingStrategyMap.put(InstitutionsEnum.GUOJIN.getCode(), GuoJinIncomingService.class);}private IncomingStrategyFactory() {}public IncomingPushService getIncomingStrategy(String code) {IncomingPushService strategy = getBean(incomingStrategyMap.get(code));return strategy;}private <T extends IncomingPushService> T getBean(Class<T> clazz) {return context.getBean(clazz);}}

调用方法如下: IncomingPushService 为父类接口声明了push()方法,XingBangIncomingService和GuoJinIncomingService都为实现的子类,实现了push()方法了

IncomingPushService incomingStrategy = strategyFactory.getIncomingStrategy(creditCode);
applyNo = incomingStrategy.push(customerInfoVO);

第二种:枚举类的实现

枚举中定义抽象方法,每一个抽象方法实例都要去实现

public enum RepaymentEnum {/*** 陆金*/XINGBANG("91440300MA5EHQXP7P", "兴邦") {@Overridepublic QueryRepaymentRecordVO repaymentQuery(FinanceLoanOrder loanOrder) {return RepaymentHandler.doRepaymentXingBang(loanOrder);}},/*** 国金*/GUOJIN("91330205MA2H42BR44", "国金涌富") {@Overridepublic QueryRepaymentRecordVO repaymentQuery(FinanceLoanOrder loanOrder) {return RepaymentHandler.doRepaymentForGuoJin(loanOrder);}};private final String code;private final String name;RepaymentEnum(String code, String name) {this.code = code;this.name = name;}/*** 还款计划查询操作**/public abstract QueryRepaymentRecordVO repaymentQuery(FinanceLoanOrder loanOrder);/*** 根据code返回枚举**/public static RepaymentEnum match(String code) {RepaymentEnum result = null;for (RepaymentEnum s : values()) {if (s.getCode().equals(code)) {result = s;break;}}return result;}
}

RepaymentHandler类,目的是一个写静态方法去包含每个不同的service类去调用不同的服务

@Component
@Slf4j
public class RepaymentHandler {/*** 国金-还款计划** @param: [loanOrder]* @return: com.dst.common.feign.center.response.QueryRepaymentRecordVO* @author: zhang yao* @date: 2023/1/4 14:24**/public static QueryRepaymentRecordVO doRepaymentForGuoJin(FinanceLoanOrder loanOrder) {FinanceRepaymentOuterService outerService = SpringBeanUtils.getBean(FinanceRepaymentOuterService.class);return outerService.queryRepaymentRecordForGuoJin(loanOrder);}/*** 兴邦-还款计划**/public static QueryRepaymentRecordVO doRepaymentXingBang(FinanceLoanOrder loanOrder) {FinanceRepaymentOuterService outerService = SpringBeanUtils.getBean(FinanceRepaymentOuterService.class);return outerService.queryRepaymentRecordForXingBang(loanOrder);}

调用的方法:

RepaymentEnum creditCode = RepaymentEnum.match(loanOrder.getCreditCode());
creditCode.repaymentQuery(loanOrder);

Java策略模式项目中的运用相关推荐

  1. Java设计模式--在项目中的应用

    原文网址:Java设计模式--在项目中的应用_IT利刃出鞘的博客-CSDN博客 简介 本文介绍我在项目中是如何运用设计模式的. 我实际用到的设计模式有:单例模式.责任链模式.观察者模式.适配器模式.策 ...

  2. java策略模式实战

    项目:保险 场景:保险业务中涉及计费的问题,每种保险的计费策略不同,为了更好的代码维护,参考大神写的java策略模式后为选择了策略模式设计了编码方案. 涉及表: 产品方案表 业务简介: 每个保险产品对 ...

  3. java策略模式 if else_Java如何利用策略模式替代if/else语句

    平时在开发中避免不了使用大量的if else语句,但过多层的if else对于性能有很大的开销,类似如下代码 public class MainStart { public static void m ...

  4. Java两种设计模式_23种设计模式(11)java策略模式

    23种设计模式第四篇:java策略模式 定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换. 类型:行为类模式 类图: 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这 ...

  5. java策略模式_Java设计模式之策略模式详解

    本文实例为大家分享了Java策略模式,供大家参考,具体内容如下 1.策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(PolicyPattern). 定义如下: Def ...

  6. java策略模式(Java策略模式多种返回结果)

    Java设计模式的中介者模式是怎样的? 如果对象之间的关系原本一目了然,中介对象的加入便是"画蛇添足". 来看下中介者模式的组成部分吧. 1) 抽象中介者(Mediator)角色: ...

  7. java策略模式案例_java策略模式典型案例

    java策略模式典型案例 java策略模式典型案例 [var1] 参考代码 : https://github.com/zhang-xiaoxiang/DesignPatterns23 没有用策略模式我 ...

  8. Java 并发在项目中的使用场景

    1.并发编程的三个核心问题: (1)分工:所谓分工指的是如何高效地拆解任务并分配给线程 (2)同步:而同步指的是线程之间如何协作 (3)互斥:互斥则是保证同一时刻只允许一个线程访问共享资源 (4)应用 ...

  9. java策略模式实战示例

    现已放在gitee上,可以不下载直接参考一下即: https://gitee.com/zhang-xiao-xiang/zxx-pattern 日常碰到的业务概述 登录类型,支付类型,供应商渠道,不同 ...

最新文章

  1. Project Management - 3) Manage Your Meetings
  2. Ubuntu - 安装 jdk 、配置 Java 环境变量、编辑 Test.java 文件并输出 Hello World!
  3. 浅谈5G机房配套那些事
  4. 计算机网络中mf df_计算机网络(第四章)
  5. TextBox设置ReadOnly属性后后台得不到值解决方法 [转]
  6. 放生切勿盲目,放生动物要有选择
  7. Sublime Text 3.0汉化教程
  8. 【毕业设计-教程】红外控制原理详解 - 单片机嵌入式 物联网 stm32 c51
  9. tumblr_如何在WordPress中添加Tumblr共享按钮
  10. 迅雷后门 迅雷签名可疑文件 请大家关注 内部邮件大爆料 过全部杀毒软件
  11. 在excel中使用offset和match函数进行二维表对二维表的匹配
  12. 【安全通告】创宇安全智脑:GitLab ExifTool远程命令执行漏洞在野利用(CVE-2021-22205)...
  13. xml和json转换的在线工具
  14. Java中多线程、多线程的实现方式、同步代码块的方式
  15. 百余署名AI论文被爆抄袭 智源现已致歉
  16. 记录(Record)
  17. X12季节调整在matlab上的实现
  18. 谁是中国最大的门户网站??
  19. 温湿度系统(花葵、库房检测)
  20. 3D立体相册模板(大小可更改)

热门文章

  1. 京东如何打造K8s全球最大集群支撑万亿电商交易
  2. 万达保安“苦修Java”,7个月破茧成蝶,如今薪资翻了4倍
  3. vue-cli常用命令
  4. python判断数据_python判断数据类型的方法
  5. 怎样防止App在后台运行,点击应用桌面图标重新启动
  6. 会声会影2020永久汉化补丁使用中常见问题及解决办法
  7. Wacom数位板在Mac 10.15以上系统驱动安装不支持
  8. gprof输出内容解释
  9. python按hash分组_Python算法系列-哈希算法
  10. 免费版本oss对象存储。如何部署一个免费的minio对象存储空间?