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

策略模式在支付场景的使用

1、先看使用方式

RegistrationForm form = getByFormCode(payParam.getFormCode());
//挂号单不存在
if (form == null) {
   return payTypeFactory.getType(RegistrationPayTypeEnum.APP_FIRST_PAY.getType()).pay(payParam);
}
//挂号单已存在
return payTypeFactory.getType(RegistrationPayTypeEnum.APP_REPEAT_PAY.getType()).pay(payParam);
        

2、实现思路

1)前端传来的报文中的Type类型
2)使用工厂类根据Type类型的值获得对应的策略实现类
3)执行相关方法

3、相关实现类

public enum PayTypeEnum {
    APP_FIRST_PAY(1, "APP首次支付"),
    APP_REPEAT_PAY(2, "APP二次支付"),

    ;
    int type;
    String desc;

    public int getType() {
        return type;
    }

    PayTypeEnum(int type, String desc) {
        this.type = type;
        this.desc = desc;
    }
}

public interface PayType {
    /**
     * 获得支付类型
     *
     * @return 支付类型
     */
    Integer getType();

    /**
     * 支付方法
     *
     * @param payParam
     * @return
     */
    PayVO pay(Order order);
}
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;


@Component
public class PayTypeFactory implements InitializingBean, ApplicationContextAware {
    private static final Map<Integer, PayType> PAY_TYPE_HANDLER_MAP = new HashMap<>();
    private ApplicationContext appContext;

    public PayType getType(Integer type) {
        return PAY_TYPE_HANDLER_MAP.get(type);
    }
    @Override
    public void afterPropertiesSet() throws Exception {
        appContext.getBeansOfType(PayType.class)
                .values()
                .forEach(handler -> PAY_TYPE_HANDLER_MAP.put(handler.getType(), handler));
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        appContext = applicationContext;
    }
}
@Component
@Slf4j
public class AppFirstPay implements PayType {
    @Autowired
    OrderService orderService;

    @Override
    public Integer getType() {
        return OrderPayTypeEnum.APP_FIRST_PAY.getType();
    }

    @Override
    public PayVO pay(OrderPayParam payParam) {

        Order order;
        //订单不存在生成订单
        order = orderService.assembleOrder(payParam);

        //调用交易系统去支付
        OrderPayVO payResult = orderService.payProcess(order, payParam);
        
		return payResult;
    }
}

@Component
@Slf4j
public class AppRepeatPay implements PayType {
    @Autowired
    OrderService orderService;

    @Override
    public Integer getType() {
        return PayTypeEnum.APP_REPEAT_PAY.getType();
    }

    @Override
    public PayVO pay(PayParam payParam) {

        //订单已存在
        Form order = orderService.getByFormCode(payParam.getFormCode());
		
		//调用交易系统去支付
		PayVO payResult = orderService.payProcess(order, payParam);

		return payResult;
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
电子零售正朝着不断发展的趋势和每年不断增长的电子购物者的方向加速发展,追求卓越。 在我们社会中,拥有最大购买力的人中约有67%的人更喜欢电子购物。 在过去的五年中,印度经历了一场数字革命,它在不同程度上改变了消费者的购物体验。 不断变化的消费者偏好,可支配收入的增加,智能手机的使用增加以及对数字媒体的广泛接触,极大地影响了印度零售市场的动态。 预计到2025年,印度的电子商务将超过2万亿印度卢比,其中消费电子将是其主要推动力之一。 印度的人口状况发生了特征性的变化。 GenY(工作年龄人口,在职妇女和印度中产阶级)已经发展成为最有影响力的人群,引发了新的社会,技术和经济趋势。 城市化也将影响市场,到2025年将有64%的印度人口实现城市化,到2030年城市将占印度GDP的70%。较新的智慧城市倡议被认为是实现更高城市化率的推动力。 到2020年,印度的消费电子和电器市场预计将达到约300亿美元。在线零售在电子和电器销售中的渗透率在2016年约为3-5%,预计到2020年将达到20-25%左右。这意味着在2016年至2020年期间,电子产品在线零售的复合年增长率约为75%。随着互联网访问量的不断扩大和在线购物的偏好,印度的消费电子市场将有望发展壮大。在未来五年内转型。 极为重要的是,消费电子和电器公司必须承认这一变化,并开始重新定义其零售策略,以便从长期中受益。 消费类电子产品和家电公司一直通过多项举措将产品推向市场,例如捆绑销售,折扣和激进定价。 但是,现在是重新发明轮子的时候了,因为消费者更倾向于在线购买高参与度的消费电子产品。 在过去的2-3年中,这种转变发生了,因为存在多个电子商务平台,再加上在线购物相对于传统零售商店对便利性的日益增长的偏好,如今消费者也变得非常聪明,他们对模型进行了调查。在实体零售店中,然后将价格与在线门户网站进行比较。 在我们国家,价格仍然是驱动购买的最主要因素,消费者会从提供最低价格的媒介中购买价格。 对于在节日期间计划和开展促销活动的消费类电子公司而言,在线电子商务参与者每月都进行一次促销活动,因为由于消除了利益相关者的参与,他们可以轻松地发挥自己的额外利润。价值链。 除了诸如比较多种产品之类的因素之外,在线市场上还有许多使用多种支付渠道的方案,这些方案可提供额外的现金返还和折扣。 移动互联网用户的增长将是推动该渠道增长的主要原因之一,该渠道在未来几年将覆盖印度的3亿多用户。 随着网络基础设施的发展以及3G和4G等无线技术的使用,印度的整体互联网用户群预计到2020年将达到6亿,占普及率的27%。年获得在线零售渠道的好处。 某些领先的消费类电子产品生产商已经建立了专门的数字销售和营销团队,而其他一些则与电子商务生产商紧密合作,以推销他们的产品。 公司还专注于与领先的电子商务市场(例如Flipkart和Amazon)建立合作伙伴关系的超本地化策略,它们可以通过附近的最近商店或品牌商店直接向客户提供产品。 这有助于他们确保维持有竞争力的价格,同时经销商也可以通过替代渠道推销他们的产品。 在线市场向其合作伙伴提供其他服务,以在线跟踪和推送产品。 他们提供解决方案,可以帮助卖家进行库存和订单管理,以及对销售趋势进行深入分析。 这使卖家能够制定战略来改进产品线以及营销策略.2016年的节日期间,观察到大约25%的LED电视销量,8-10%的洗衣机,冰箱和空调销量-空调,其中30%的微波销售是通过在线渠道贡献的。 电子商务零售商以折扣价提供大多数产品,这是实体店所无法比拟的。 零售商在印度100多个城市提供服务的另一个好处是,它可以帮助客户获得他们喜欢的品牌。已经对该领域以前的研究进行了审查,以确定是否存在进一步的研究差距或范围研究:Elliot和Fowell(2000)指出,不同级别的在线购买强度与客户之间的互联网使用强度没有显着关系。 调查结果表明,高强度的互联网使用与高强度的在线购买并不相关,这证实了以下事实:客户主要将互联网用于其他目的,而在线购买活动是通过互联网开发的一种辅助工具。 Park and Kim(2003)断言,电子零售企业应确定将中低强度在线购买者转换为高强度在线购买者的方法。 正如作者所建议的那样,这样的企业可以通过他们的电子商务门户以实时聊天系统的形式为客户提供实时在线支持,而增强的服务质量将是未来电子市场中竞争对手之间的差异化因素。 Korgaonkar等。 (2006年)认为,在线零售商需要建立强大的影响力,或者从长远来看会因竞争对手的流行而灭亡。 作者还指出,所有产品和服务在客户中并不同样受欢迎。 该研究的结果表明,客户仅对少数产品类别更喜欢在线购买模式。 对于其余产品,客户的偏好更倾向于购买的实际方式。 Hernandez等。 (2011年)发现,客户的收入水平与他们的在
策略模式是一种行为设计模式,它允许在运行时选择算法的行为,这些算法在一个特定的上下文中执行。在这种情况下,我们需要在支付系统中实现多种支付方式,可以使用策略模式来解决这个问题。 下面是一个简单的实现: 首先,我们需要定义一个支付策略接口,它包含一个支付方法: ```java public interface PaymentStrategy { void pay(double amount); } ``` 接下来,我们可以实现具体的支付策略,例如支付宝、微信支付和信用卡支付: ```java public class AliPayStrategy implements PaymentStrategy { @Override public void pay(double amount) { System.out.println("使用支付支付:" + amount + "元"); } } public class WeChatPayStrategy implements PaymentStrategy { @Override public void pay(double amount) { System.out.println("使用微信支付:" + amount + "元"); } } public class CreditCardPayStrategy implements PaymentStrategy { @Override public void pay(double amount) { System.out.println("使用信用卡支付:" + amount + "元"); } } ``` 现在我们可以创建一个支付上下文对象,它包含一个当前使用的支付策略: ```java public class PaymentContext { private PaymentStrategy paymentStrategy; public PaymentContext(PaymentStrategy paymentStrategy) { this.paymentStrategy = paymentStrategy; } public void pay(double amount) { paymentStrategy.pay(amount); } } ``` 使用时,我们可以创建一个支付上下文对象,然后设置需要的支付策略: ```java PaymentContext paymentContext = new PaymentContext(new AliPayStrategy()); paymentContext.pay(100.0); ``` 输出结果为: ``` 使用支付支付:100.0元 ``` 同样,我们也可以使用其他的支付策略来支付: ```java paymentContext = new PaymentContext(new WeChatPayStrategy()); paymentContext.pay(200.0); paymentContext = new PaymentContext(new CreditCardPayStrategy()); paymentContext.pay(300.0); ``` 输出结果分别为: ``` 使用微信支付:200.0元 使用信用卡支付:300.0元 ``` 这样,我们就可以灵活地选择不同的支付方式支付

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值