Java策略模式项目中的运用
第一种:策略模式工厂类的实现
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策略模式项目中的运用相关推荐
- Java设计模式--在项目中的应用
原文网址:Java设计模式--在项目中的应用_IT利刃出鞘的博客-CSDN博客 简介 本文介绍我在项目中是如何运用设计模式的. 我实际用到的设计模式有:单例模式.责任链模式.观察者模式.适配器模式.策 ...
- java策略模式实战
项目:保险 场景:保险业务中涉及计费的问题,每种保险的计费策略不同,为了更好的代码维护,参考大神写的java策略模式后为选择了策略模式设计了编码方案. 涉及表: 产品方案表 业务简介: 每个保险产品对 ...
- java策略模式 if else_Java如何利用策略模式替代if/else语句
平时在开发中避免不了使用大量的if else语句,但过多层的if else对于性能有很大的开销,类似如下代码 public class MainStart { public static void m ...
- Java两种设计模式_23种设计模式(11)java策略模式
23种设计模式第四篇:java策略模式 定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换. 类型:行为类模式 类图: 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这 ...
- java策略模式_Java设计模式之策略模式详解
本文实例为大家分享了Java策略模式,供大家参考,具体内容如下 1.策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(PolicyPattern). 定义如下: Def ...
- java策略模式(Java策略模式多种返回结果)
Java设计模式的中介者模式是怎样的? 如果对象之间的关系原本一目了然,中介对象的加入便是"画蛇添足". 来看下中介者模式的组成部分吧. 1) 抽象中介者(Mediator)角色: ...
- java策略模式案例_java策略模式典型案例
java策略模式典型案例 java策略模式典型案例 [var1] 参考代码 : https://github.com/zhang-xiaoxiang/DesignPatterns23 没有用策略模式我 ...
- Java 并发在项目中的使用场景
1.并发编程的三个核心问题: (1)分工:所谓分工指的是如何高效地拆解任务并分配给线程 (2)同步:而同步指的是线程之间如何协作 (3)互斥:互斥则是保证同一时刻只允许一个线程访问共享资源 (4)应用 ...
- java策略模式实战示例
现已放在gitee上,可以不下载直接参考一下即: https://gitee.com/zhang-xiao-xiang/zxx-pattern 日常碰到的业务概述 登录类型,支付类型,供应商渠道,不同 ...
最新文章
- Project Management - 3) Manage Your Meetings
- Ubuntu - 安装 jdk 、配置 Java 环境变量、编辑 Test.java 文件并输出 Hello World!
- 浅谈5G机房配套那些事
- 计算机网络中mf df_计算机网络(第四章)
- TextBox设置ReadOnly属性后后台得不到值解决方法 [转]
- 放生切勿盲目,放生动物要有选择
- Sublime Text 3.0汉化教程
- 【毕业设计-教程】红外控制原理详解 - 单片机嵌入式 物联网 stm32 c51
- tumblr_如何在WordPress中添加Tumblr共享按钮
- 迅雷后门 迅雷签名可疑文件 请大家关注 内部邮件大爆料 过全部杀毒软件
- 在excel中使用offset和match函数进行二维表对二维表的匹配
- 【安全通告】创宇安全智脑:GitLab ExifTool远程命令执行漏洞在野利用(CVE-2021-22205)...
- xml和json转换的在线工具
- Java中多线程、多线程的实现方式、同步代码块的方式
- 百余署名AI论文被爆抄袭 智源现已致歉
- 记录(Record)
- X12季节调整在matlab上的实现
- 谁是中国最大的门户网站??
- 温湿度系统(花葵、库房检测)
- 3D立体相册模板(大小可更改)