正定城乡建设网站,seo快速推广,网站可以做软件检测吗,WordPress动态二维码插件项目推荐最近开发完成的项目中使用到了策略模式#xff0c;实现多种支付方式#xff0c;避免了后期支付方式if-else代码的冗余#xff0c;也有利于后期支付的一个扩展。同时这个项目非常适合于做毕设#xff0c;想了解这个项目的同学可以联系我QQ#xff1a;3808898981
前…项目推荐最近开发完成的项目中使用到了策略模式实现多种支付方式避免了后期支付方式if-else代码的冗余也有利于后期支付的一个扩展。同时这个项目非常适合于做毕设想了解这个项目的同学可以联系我QQ3808898981
前台首页 后台管理员 后台商户端 什么是策略模式呢
策略模式Strategy Design Pattern定义一堆算法类并将每个算法分别封装起来让它们可以互相替换被封装起来的算法具有独立性外部不可改变其特性。
策略模式可以使算法的变化独立于使用它们的客户端这里的客户端代指使用算法的代码。
策略模式的应用场景 策略模式最常见的应用场景是利用它来避免冗长的 if-else 或 switch 分支判断。不过它的作用还不止如此。它也可以像模板模式那样提供框架的扩展点等等。
当我们需要多个功能相似的类并且需要它们之间可以灵活切换时就非常适合使用策略模式。
策略模式的构成 策略类的定义比较简单需要定义以下两种角色 抽象策略接口类定义了策略类需要实现的方法规范。 策略实现类继承自抽象策略接口为具体策略类。 当有多个策略时可以通过简单工厂封装所有的策略使调用更加易用
策略工厂类一般来说通过一个策略工厂将一群功能相同的策略封装起来调用更加方便。 通过一个文件处理的例子来说明有一个文件处理的通用类可以处理excel、txt、exe文件。 面对不同类型的文件返回具体对应的文件处理类也就是具体的策略类。 实战 支付实体类 /*** Author: weixueshi* Create: 2023/12/31 - 11:03* Version: v1.0*/DataAllArgsConstructorNoArgsConstructorpublic class Pay implements Serializable {private static final long serialVersionUID 1L;/*** 订单号*/private String orderId;/*** 商品名称*/private String name;/*** 商品金额*/private String price;/*** 支付方式*/private String paymentType;} 定义一个顶级支付接口 public interface PayStrategy {/*** 支付接口* param pay* return*/Response pay(Pay pay);} 定义两个具体实现类支付宝和微信支付 /*** Author: weixueshi* Create: 2024/3/14 - 14:48* Version: v1.0*//*** 支付宝支付具体实现*/Slf4jComponentpublic class AlipayStrategyImpl implements PayStrategy{Overridepublic Response pay(Pay pay) {//支付的具体处理逻辑log.info(我是支付宝支付------);return Response.success();}} /**** Author: weixueshi* Create: 2024/3/14 - 14:49* Version: v1.0*//*** 微信支付具体实现*/Slf4jComponentpublic class WechatPayStrategyImpl implements PayStrategy {Overridepublic Response pay(Pay pay) {//支付的具体处理逻辑log.info(我是微信支付------);return Response.success();}} 定义一个调用支付的服务类 /*** Author: weixueshi* Create: 2024/3/14 - 14:50* Version: v1.0*//*** 创建支付服务类根据用户选择的支付方式创建对应的策略对象并执行支付操作*/Service(payService)public class PayService {private MapString, PayStrategy payStrategyMap new HashMapString, PayStrategy();public PayService() {// 将支付宝和微信支付策略对象放入Map中payStrategyMap.put(alipay,new AlipayStrategyImpl());payStrategyMap.put(wechat,new WechatPayStrategyImpl());}public Response pay(Pay pay) {// 根据用户选择的支付方式获取对应的策略对象PayStrategy payStrategy payStrategyMap.get(pay.getPaymentType());if (payStrategy null) {throw new ServiceException(支付方式不支持);}// 执行支付操作return payStrategy.pay(pay);}} 最后在controller层调用支付 Slf4jCrossOriginRestControllerRequiredArgsConstructorpublic class OrderPayController {private final PayService payService;/*** 支付接口* return*/PostMapping(/common)public Response commonPay(RequestBody Pay pay){log.info({}支付请求进来了-----------,pay.getPaymentType());return payService.pay(pay);}} 到此使用策略模式实现多种支付就已完成