系列二十四、Spring设计模式之策略模式

一、前言

        对于我们Java开发人员来说,Spring框架的重要性不言而喻,可以说Java领域之所以发展这么壮大,生态这么丰富,功能这么强大,是离不开Spring以及由其衍生出来的各种子模块的,正是由它们共同奠定了JavaEE的基石!说起Spring,不得不说一下里面运用的非常丰富的设计模式,日常工作或者笔试面试中,必不可少的会用到或者被问到Spring设计模式相关的问题,查询网上资料,关于Spring设计模式相关的文章也鳞次栉比,好的有差的也有,代码断断续续的更是多数,看的人眼花缭乱,云里雾里!基于此,我决定结合自己工作中的实践,以及网上的资料,详细的写一篇关于Spring设计模式相关的案例,保证大家伙能够在轻松愉悦中,一窥Spring设计模式的奥妙!算是自己对Spring设计模式的一个总结吧,也为广大想系统学习Spring设计模式的朋友们提供一个参考,助力工作,顺利面试!,如果帮助到了你,请点赞 + 收藏 +关注 + 评论!

        说明:为了方便开发以下系列代码案例以Springboot脚手架进行演示

二、策略模式

2.1、概述

        策略模式是一种行为型设计模式,它定义了一些列算法,并将它们封装起来,使它们可以相互替换,而不影响客户端的使用。策略模式主要涉及到三个角色,即:环境类(Context)、抽象策略类(Strategy)、具体策略类(ConcreteStrategy),运行流程是:环境类持有一个策略对象的引用,可以根据不同的情况选择不同的策略执行业务逻辑,出现策略类定义了一个公共的接口,用于封装不同的算法,具体策略类实现了抽象策略类中的接口,并提供具体的算法实现。

2.2、案例代码

2.2.1、项目概览

系列二十四、Spring设计模式之策略模式_第1张图片

2.2.2、pom


	
	
		org.springframework.boot
		spring-boot-starter-web
	
	
		org.springframework.boot
		spring-boot-devtools
		runtime
		true
	
	
		org.springframework.boot
		spring-boot-starter-test
		test
	
	
		org.springframework.boot
		spring-boot-starter-json
	
	
		org.springframework.boot
		spring-boot-starter-validation
	

	
	
		org.projectlombok
		lombok
		true
	
	
		org.apache.commons
		commons-collections4
		4.1
	
	
		org.apache.commons
		commons-lang3
	
	
		com.alibaba
		fastjson
		1.2.76
	
	
		com.google.guava
		guava
		20.0
	
	
		com.alibaba.citrus
		citrus-springext-all
		3.2.4
	
	
		cn.hutool
		hutool-all
		5.7.22
	

2.2.3、PayStrategy

/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/11/28 7:47
 * @Description: 抽象策略类
 */
public interface PayStrategy {

    /**
     * 支付
     * @param amount
     * @return
     */
    String pay(double amount);

}

2.2.4、AlipayStrategy

/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/11/28 7:48
 * @Description:
 */
@Component("alipay")
public class AlipayStrategy implements PayStrategy {

    @Override
    public String pay(double amount) {
        return "使用支付宝支付了【" + amount + "】元";
    }
}

2.2.5、WeChatPayStrategy

/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/11/28 7:48
 * @Description:
 */
@Component("wechatPay")
public class WeChatPayStrategy implements PayStrategy {

    @Override
    public String pay(double amount) {
        return "使用微信支付了【" + amount + "】元";
    }
}

2.2.6、IcbcPayStrategy

/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/11/28 7:48
 * @Description:
 */
@Component("iCBCPay")
public class IcbcPayStrategy implements PayStrategy {

    @Override
    public String pay(double amount) {
        return "使用工商银行支付了【" + amount + "】元";
    }
}

2.2.7、PayService

/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/11/28 7:53
 * @Description:
 */
@Getter
@Setter
@Service
public class PayService {

    private PayStrategy payStrategy;

    public String pay(double amount) {
        return payStrategy.pay(amount);
    }

}

2.2.8、PayController

/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/11/28 7:44
 * @Description:
 */
@Slf4j
@RestController
public class PayController {

    @Resource
    private PayService payService;

    @PostMapping("/pay")
    public String pay(@RequestBody PayParam param) {
        log.info("PayController pay param:{}", JSON.toJSONString(param));
        payService.setPayStrategy(SpringUtil.getBean(param.getPayType()));

        return payService.pay(param.getAmount());
    }

}

 2.2.9、测试

系列二十四、Spring设计模式之策略模式_第2张图片

你可能感兴趣的:(Spring5系列,java,spring,设计模式)