策略模式实现多种支付方式

使用策略模式优雅的实现多种支付方式(支付宝、微信),或者多种支付场景(订单、维修金)的业务,且方便扩展。

下例是使用注解配合反射方式,扫描到所有的具体的支付策略并放到map集合中,然后根据前端传递来的支付类型参数,选择对应的支付策略,完成支付过程。

 

如上图:

PayStrategy是支付策略接口;

OrderPay(订单支付),RepairPay(维修金支付)是具体的支付策略(支付场景);

AbstractPayService是实现PayStrategy接口的抽象类,规定了支付的流程,在其中选择具体的支付策略,为controller提供支付接口;

PayServiceImpl实现AbstractPayService中规定的支付流程的具体步骤,通过PayStrategyFactory获取实际的支付策略class,通过BeansUtil返回spring容器中的策略实现类bean;

PayStrategyFactory通过扫描被Pay注解注释的类,获得所有支付策略的类型和class;

Pay注解表名被注解的类是一个具体的支付策略,可以设置支付类型。

 

具体代码如下:

PayStrategy
package com.zhya.strategy.service;

/**
 * 支付策略
 *
 * @author zhangyang
 * @date 2018/11/14
 **/
public interface PayStrategy {

    /**
     * 支付前准备支付参数
     *
     * @param payFor
     * @return
     */
    boolean prePay(String payFor);

    /**
     * 支付后处理支付回调结果
     *
     * @param payFor
     * @param isPaySuccess
     */
    void afterPay(String payFor, boolean isPaySuccess);
}

 

Pay注解
package com.zhya.strategy.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 支付策略
 *
 * @author zhangyang
 * @date 2018/11/14
 **/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Pay {
    /*
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值